GLYLIB
0.3.0b
|
00001 /** \file index_utilities.c 00002 * Purpose: Functions associated with internal addresses. 00003 * Begin 20110417 BLFoley 00004 * 00005 */ 00006 #include <mylib.h> 00007 #include <molecules.h> 00008 00009 ensindex copy_moli_to_ensi(molindex moli){ 00010 ensindex ensi; 00011 ensi.E=ensi.A=-1; 00012 ensi.i=moli.i; 00013 ensi.m=moli.m; 00014 ensi.r=moli.r; 00015 ensi.a=moli.a; 00016 return ensi; 00017 } 00018 00019 char is_consistent_moli_moli(molindex mone, molindex mtwo){ 00020 char answer='y'; 00021 if(mone.i!=mtwo.i) answer='i'; 00022 if(mone.m!=mtwo.m) answer='n'; 00023 if(mone.r!=mtwo.r) answer='n'; 00024 if(mone.a!=mtwo.a) answer='n'; 00025 return answer; 00026 } 00027 00028 char is_consistent_ensi_ensi(ensindex eone, ensindex etwo){ 00029 char answer='y'; 00030 if(eone.E!=etwo.E) answer='E'; 00031 if(eone.A!=etwo.A) answer='A'; 00032 if(eone.i!=etwo.i) answer='i'; 00033 if(eone.m!=etwo.m) answer='n'; 00034 if(eone.r!=etwo.r) answer='n'; 00035 if(eone.a!=etwo.a) answer='n'; 00036 return answer; 00037 } 00038 00039 00040 char is_consistent_molbond_molbond(molbond mb1, molbond mb2){ 00041 char answer='y',type='\0'; 00042 00043 answer=is_consistent_moli_moli(mb1.s,mb2.s); 00044 if(answer=='n') return answer; 00045 answer=is_consistent_moli_moli(mb1.t,mb2.t); 00046 if(answer=='n') return answer; 00047 00048 if(mb1.i!=mb2.i) answer='i'; 00049 if(((mb1.typ==NULL)&&(mb2.typ!=NULL))||((mb1.typ!=NULL)&&(mb2.typ==NULL))) type='t'; 00050 if((mb1.typ!=NULL)&&(mb2.typ!=NULL)) {if((&(mb1.typ[0]))!=(&(mb2.typ[0]))) type='t';} 00051 if(mb1.o!=mb2.o) type='t'; 00052 00053 if(type=='t') 00054 { 00055 if(answer=='i') answer='T'; 00056 if(answer=='y') answer='t'; 00057 } 00058 00059 return answer; 00060 } 00061 char is_consistent_molbond_molbond_inverse(molbond mb1, molbond mb2){ 00062 char answer='y',type='\0'; 00063 00064 answer=is_consistent_moli_moli(mb1.s,mb2.t); 00065 if(answer=='n') return answer; 00066 answer=is_consistent_moli_moli(mb1.t,mb2.s); 00067 if(answer=='n') return answer; 00068 00069 if(mb1.i!=mb2.i) answer='i'; 00070 if(((mb1.typ==NULL)&&(mb2.typ!=NULL))||((mb1.typ!=NULL)&&(mb2.typ==NULL))) type='t'; 00071 if((mb1.typ!=NULL)&&(mb2.typ!=NULL)) {if((&(mb1.typ[0]))!=(&(mb2.typ[0]))) type='t';} 00072 if(mb1.o!=mb2.o) type='t'; 00073 00074 if(type=='t') 00075 { 00076 if(answer=='i') answer='T'; 00077 if(answer=='y') answer='t'; 00078 } 00079 00080 return answer; 00081 } 00082 00083 00084 00085 char is_consistent_ensi_moli(ensindex ensi, molindex moli){ 00086 char answer='y'; 00087 if(ensi.i!=moli.i) answer='i'; 00088 if(ensi.m!=moli.m) answer='n'; 00089 if(ensi.r!=moli.r) answer='n'; 00090 if(ensi.a!=moli.a) answer='n'; 00091 return answer; 00092 } 00093 void set_residue_molindexes(residue *r, int mi, int ri){ 00094 int i; 00095 r[0].moli.i=-1; 00096 r[0].moli.m=mi; 00097 r[0].moli.r=ri; 00098 r[0].moli.a=-1; 00099 for(i=0;i<r[0].na;i++) 00100 { 00101 r[0].a[i].moli.i=-1; 00102 r[0].a[i].moli.m=mi; 00103 r[0].a[i].moli.r=ri; 00104 r[0].a[i].moli.a=i; 00105 } 00106 } 00107 void set_molecule_molindexes(molecule *m, int mi){ 00108 int i; 00109 m[0].mi=mi; 00110 for(i=0;i<m[0].nr;i++) 00111 { 00112 set_residue_molindexes(&m[0].r[i],mi,i); 00113 } 00114 } 00115 void set_assembly_molindexes(assembly *A){ 00116 int i; 00117 for(i=0;i<A[0].nm;i++) 00118 { 00119 set_molecule_molindexes(&A[0].m[i][0],i); 00120 } 00121 } 00122 void set_ensemble_molindexes(ensemble *E){ 00123 int i; 00124 for(i=0;i<E[0].nm;i++) 00125 { 00126 set_molecule_molindexes(&E[0].m[i],i); 00127 } 00128 } 00129 00130