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

📄 process.h

📁 药物开发中的基于结构的从头设计代码
💻 H
字号:
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# include <math.h>
# include <time.h>
# define TRUE 1
# define FALSE 0
# define ATOM_OVERLAP_RANGE 0.50

class Atom
	{
	 public:
	 	int id;			// ID
		int valid;		// valid indicator
		int part;		// component indicator		
		int num_neib;		// number of neighboring atoms
		int num_nonh;		// number of non-H neighboring atoms
		int neib[10];		// ID of neighboring atoms
		char name[10];		// name of the atom
	 	char type[10];		// SYBYL atom type
	 	char xtype[20];		// SCORE atom type
	 	float coor[3];		// coordinates
		float root[3];		// h-bond roots' coordinates
		float r;		// vdw radius
		float eps;		// vdw epsilon value
		int weight;		// atomic weight
		float R;		// SCORE radius
		float logp;		// atomic hydrophobic scale
		char hb[3];		// h-bond property
	 	float score; 		// atomic binding score
		int ring;		// ring indicator

		Atom();			// constructor
		~Atom();		// deconstructor

		void Show_Content() const;
	};

class Bond
	{
	 public:
		int id;
		int valid;		// valid indicator
		int atom_1;		// ID of the atom_1
		int atom_2;		// ID of the atom_2
		char type[3];		// bond type
		int part;		// ID of the component
		int ring;		// ring indicator
		float length;		// bond length
		int num_neib;		// number of neighboring bonds
		int neib[10];		// ID of neighboring bonds

		Bond();			// constructor
		~Bond();		// deconstructor

		void Show_Content() const;
	};

class Torsion
	{
	 public:
		Atom atom_1;
		Atom atom_2;
		Atom atom_3;
		Atom atom_4;
		char type[3];		// type of the torsion between 2-3
		int angle;		// torsion angle, in degree
		float V;		// potential barrier
		int n;			// periodicity
		int S;			// sign
		float e;		// torsion energy

		Torsion();		// constructor
		~Torsion();		// deconstructor

		void Show_Content() const;
	};

class Group
	{
	 public:
		int valid;
		int num_neib;		// number of neighboring atoms
		int num_nonh;		// number of neighboring non-h atoms
		int num_h;		// number of neighboring hydrogen atoms
		int num_hetero;		// number of neighboring heteroatoms
		int num_pi;		// number of neighboring pi atoms
		int num_car;		// number of neighboring c.ar
		int num_nar;		// number of neighboring n.ar
		int db_type;		// double bond type

		Atom center;		// center atom of the group
		Atom neib[10];		// neighboring atoms
		Bond bond[10];		// bonds

		Group();		// constructor
		~Group();		// deconstructor

		void Show_Content() const;
	};

class Parameter
        {
         public:
		char ligands_file[160];
		float similarity_cutoff;
		int num_output;
		char output_dir[160];

		int max_mol_weight;
                int min_mol_weight;
                float max_logp;
                float min_logp;
                float max_pkd;
                float min_pkd;

                Parameter(char *filename);
		~Parameter();

		void Show_Content() const;
		void Read_Index(char *filename);
		void Check_Output_Directory() const;
        };

class Ligand
        {
         public:
		int id;
		float possibility;
		int valid;
                char name[80];
                int weight;
                char formula[40];
		char index[61];
		float binding_score;
		float chemical_score;
		float logp;
		int num_donor_atom;
		int num_acceptor_atom;
		int wins;
		int num_fused_ring;

                int num_atom;
                int num_bond;
		int num_part;

                Atom *atom;
                Bond *bond;

                Ligand();              		// constructor
		Ligand(int max_atom_num, int max_bond_num);
		Ligand(const Ligand &original);
		~Ligand();			// deconstructor

		Ligand& operator = (const Ligand &original);
		Ligand& operator <= (const Ligand &original);

		void Clean_Members();
		void Show_Parameter() const;
		void Show_Structure() const;
                void Read_From_Mol2(char *filename, int position=1);
                void Write_Out_Mol2(char *filename) const;
                void Read_From_Lig(char *filename, int position=1);
                void Write_Out_Lig(char *filename) const;
        };

class Population
        {
         private:
		int num_output;
		Ligand *output;

		int num_valid;
		Ligand *pool;

                int num_member;
		struct Record
			{
			 int valid;
			 int id;
			 char name[80];
			 int weight;
			 char formula[40];
			 char index[61];
			 float binding_score;
			 float chemical_score;
			 float logp;
			 int wins;
			};
		Record *member;

		float *sim_record;  

                int max_weight;
		int min_weight;
		int ave_weight;
                float max_binding_score;
		float min_binding_score;
		float ave_binding_score;
                float max_chemical_score;
		float min_chemical_score;
		float ave_chemical_score;
		float max_logp;
		float min_logp;
		float ave_logp;
		
         public:
                Population();   // constructor
                ~Population();  // deconstructor

		void Analyze_Population(char *filename);
		void Extract_Members(char *filename);
		void Select_Results();
		void Cluster_Results();
		void Output_Results();
		void Target_Similarity(char *filename);
        };

// check.c
char *New_Bond_Viability_Check(Group &group_1, Group &group_2);
int Group_Viability_Check(const Group &group);
int Conformation_Duplicate_Check(const Ligand &lig1, const Ligand &lig2);
int Molecule_Duplicate_Check(const Ligand &lig1, const Ligand &lig2);
float Cal_Molecular_Similarity(const Ligand &lig1, const Ligand &lig2);

// misc.c
float Distance(float a[3], float b[3]);
float Distance2(float a[3], float b[3]);
void Translate_Point(float start[3], float move[3], float end[3]);
void Rotate_Point(float theta, float axis[3], float origin[3],
                  float start[3], float end[3]);
void Cross_Multiply(float v1[3], float v2[3], float result[3]);
float Point_Multiply(float v1[3], float v2[3]);
float Angle_Of_Two_Vectors(float v1[3], float v2[3]);
float Torsion_Angle(float p1[3], float p2[3], float p3[3], float p4[3]);
void Unify_Vector(float vect[3]);
void Get_Sp3_Coordinates(float v1[3], float v2[3], float v3[3], float v4[3]);
void Get_Sp2_Coordinates(float v1[3], float v2[3], float v3[3]);
void Set_Random_Number();
char *Get_Time();
int Pow(int x, int y);
int Blank_Line_Check(char *line);
void Memory_Allocation_Error();
void Openning_File_Error(char *filename);
void Reading_File_Error(char *filename);
void PDB_Format_Error(char *filename);
void Mol2_Format_Error(char *filename);
void Lig_Format_Error(char *filename);
void Missing_Parameter_Error(char *name);
void Invalid_Parameter_Error(char *name);
void Check_Directory(char *name);

⌨️ 快捷键说明

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