⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parameter.c

📁 药物开发中的基于结构的从头设计代码
💻 C
字号:
# include "process.h"

Parameter::Parameter(char *filename)
{
	strcpy(ligands_file,"none");

	similarity_cutoff=0.90;

	num_output=200;
	strcpy(output_dir,"results.mdb");

	max_mol_weight=600;
        min_mol_weight=200;
        max_logp=6.00;
        min_logp=2.00;
        max_pkd=10.00;
        min_pkd=5.00;

	Read_Index(filename);

	Check_Output_Directory();
}

Parameter::~Parameter()
{
	// deconstructor
}

void Parameter::Read_Index(char *filename)
{
	FILE *fp;
	char buf[160],head[80];
	int num_error;

	if((fp=fopen(filename,"r"))==NULL) Openning_File_Error(filename);

	for(;;)
		{
		 if(fgets(buf,160,fp)==NULL) break;
		 else if(buf[0]=='#') continue;
		 else if(Blank_Line_Check(buf)==TRUE) continue;
		 else sscanf(buf,"%s",head);

		 if(!strcmp(head,"LIGAND_COLLECTION_FILE"))
			{
			 sscanf(buf,"%*s%s",ligands_file);
			}
		 else if(!strcmp(head,"SIMILARITY_CUTOFF"))
                        {
                         sscanf(buf,"%*s%f",&similarity_cutoff);
                        }
		 else if(!strcmp(head,"NUMBER_OF_OUTPUT_MOLECULES"))
			{ 
			 sscanf(buf,"%*s%d",&num_output); 
			}
		 else if(!strcmp(head,"OUTPUT_DIRECTORY"))
			{
			 sscanf(buf,"%*s%s",output_dir); 
			}
		 else if(!strcmp(head,"MAXIMAL_MOLECULAR_WEIGHT"))
                        {
                         sscanf(buf,"%*s%d",&max_mol_weight);
                        }
                 else if(!strcmp(head,"MINIMAL_MOLECULAR_WEIGHT"))
                        {
                         sscanf(buf,"%*s%d",&min_mol_weight);
                        }
                 else if(!strcmp(head,"MAXIMAL_LOGP"))
                        {
                         sscanf(buf,"%*s%f",&max_logp);
                        }
                 else if(!strcmp(head,"MINIMAL_LOGP"))
                        {
                         sscanf(buf,"%*s%f",&min_logp);
                        }
		 else if(!strcmp(head,"MAXIMAL_PKD"))
                        {
                         sscanf(buf,"%*s%f",&max_pkd);
                        }
                 else if(!strcmp(head,"MINIMAL_PKD"))
                        {
                         sscanf(buf,"%*s%f",&min_pkd);
                        }
		 else continue;
		}

	fclose(fp);

	num_error=0;

	if(!strcmp(ligands_file,"none")) 
		{
		 Missing_Parameter_Error("LIGAND_COLLECTION_FILE");
		 num_error++;
		}

	if(similarity_cutoff<0.00||similarity_cutoff>1.00)
                {
                 Invalid_Parameter_Error("SIMILARITY_CUTOFF");
                 num_error++;
                }

	if(max_mol_weight<min_mol_weight)
                {
                 puts("Error: MAXIMAL_MOLECULAR_WEIGHT < MINIMAL_MOLECULAR_WEIGHT");
                 num_error++;
                }
        if(max_logp<min_logp)
                {
                 puts("Error: MAXIMAL_LOGP < MINIMAL_LOGP");
                 num_error++;
                }

	if(max_pkd<min_pkd)
                {
                 puts("Error: MAXIMAL_PKD < MINIMAL_PKD");
                 num_error++;
                }

	if(num_output<=0)
		{
		 Invalid_Parameter_Error("NUMBER_OF_OUTPUT_MOLECULES");
		 num_error++;
		}

	Check_Directory(output_dir);

	if(num_error!=0)
		{
		 printf("\n");
	 	 printf("%d errors have been detected in the parameter file.\n",num_error);
		 printf("Please correct them and try again.\n");
		 exit(1);
		}

	return;
}

void Parameter::Show_Content() const
{
	printf("\n");
        printf("LIGAND_COLLECTION_FILE\t\t%s\n",ligands_file);
	printf("SIMILARITY_CUTOFF\t\t%-5.2f\n",similarity_cutoff);
        printf("NUMBER_OF_OUTPUT_MOLECULES\t%d\n",num_output);
        printf("OUTPUT_DIRECTORY\t\t%s\n",output_dir);
	printf("MAXIMAL_MOLECULAR_WEIGHT\t%d\n",max_mol_weight);
	printf("MINIMAL_MOLECULAR_WEIGHT\t%d\n",min_mol_weight);
	printf("MAXIMAL_LOGP\t%5.2f\n",max_logp);
	printf("MINIMAL_LOGP\t%5.2f\n",min_logp);
	printf("MAXIMAL_PKD\t%6.2f\n",max_pkd);
	printf("MINIMAL_PKD\t%6.2f\n",min_pkd);

	return;
}

void Parameter::Check_Output_Directory() const
{
	FILE *fp;
	char filename[160],command[160];
	
	strcpy(filename,output_dir); strcat(filename,".");

	if((fp=fopen(filename,"r"))==NULL)
	{
	 strcpy(command,"mkdir "); 
	 strcat(command,output_dir);
	 system(command);
	 printf("\nDirectory '%s' does not exist ... ", output_dir);
	 printf("it is created automatically.\n\n");
	}

	fclose(fp);

	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -