/**************************************************************************/ /****************** Craig solid angle calculations **********************/ /**************************************************************************/ #ifndef VIS_BIT #define VIS_BIT 1 /* bit to indicate visability of calculation detail */ #endif #define FIRST 1 /* first atom is entire double overlap region */ #define SECOND 2 /* second atom is entire double overlap region */ #define BOTH 3 /* both atoms involved in double overlap */ #define S_NORMAL 0 /* normal overlap combo., I's from different atoms */ #define S_GCENT 1 /* special, several regions, I's from same atoms */ #define S_NEGS 2 /* ellipse on other side of G */ #define S_PERC 40 /* percentage gap between A and G (rel to SVangle) */ struct ellipsestruct { double a,b,c; /* ellipse parameters */ double delta; /* atom angle from G */ Atms *A; /* pointer to atom */ Vector I[2]; /* vectors to overlap intersepts */ double phi[2]; /* angles of intersepts from -A(x,y) */ char mode; /* mode (normal or multi_atom) */ }; typedef struct ellipsestruct Elps; struct overlapstruct { Elps El[MAX_OVER]; /* ellipses encompassing overlap */ Vector G; /* vector to center of overlap */ int order; /* overlap order (eg. 3=triple overlap */ int nell; /* number of ellipses bounding overlap */ double solid; /* solid angle calculated */ struct overlapstruct *prev; /* pointer to previous overlap structure */ struct overlapstruct *next; /* pointer to next overlap structure */ }; typedef struct overlapstruct Over; Over *New_Over(Over *old); Over *Close_Over(Over *current); void Initialize_Over(Over *over, Atms *A[MAX_OVER], int order); void Find_2atom_Intersepts(double alpha, double beta ,Vector V[2], Vector I[2]); void Setup_Two_Ellipses(Over *over, Atms *A[MAX_OVER], char mode); double Double_Overlap_Solid(Over *over, double eps, unsigned mode); double New_Craig_Counting(Mol *M, double eps, unsigned mode); /**************************************************************************/ /****************** The End ... *****************************************/ /**************************************************************************/