File: chiral.c

package info (click to toggle)
pymol 2.5.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 42,288 kB
  • sloc: cpp: 476,472; python: 76,538; ansic: 29,510; javascript: 6,792; sh: 47; makefile: 24
file content (93 lines) | stat: -rw-r--r-- 1,897 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93

#include"os_std.h"
#include"sort.h"
#include"chiral.h"

static int chirality_lookup[256];

#define chi(a,b,c,d) (0xFF&(a<<6|b<<4|c<<2|d))

void ChiralInit(void)
{
  int a;
  for(a=0;a<256;a++) {
    chirality_lookup[a]=0;
  }
  
  /* these orderings have input chirality
     (equivalent to 0,1,2,3) */

  chirality_lookup[chi(0,1,2,3)]=1;
  chirality_lookup[chi(0,2,3,1)]=1;
  chirality_lookup[chi(0,3,1,2)]=1;

  chirality_lookup[chi(1,0,3,2)]=1;
  chirality_lookup[chi(1,3,2,0)]=1;
  chirality_lookup[chi(1,2,0,3)]=1;

  chirality_lookup[chi(2,0,1,3)]=1;
  chirality_lookup[chi(2,1,3,0)]=1;
  chirality_lookup[chi(2,3,0,1)]=1;

  chirality_lookup[chi(3,2,1,0)]=1;
  chirality_lookup[chi(3,1,0,2)]=1;
  chirality_lookup[chi(3,0,2,1)]=1;

  /* these orderings have reverse chirality
     (opposite to 0,1,3,2) */

  chirality_lookup[chi(0,1,3,2)]=-1;
  chirality_lookup[chi(0,2,1,3)]=-1;
  chirality_lookup[chi(0,3,2,1)]=-1;

  chirality_lookup[chi(1,0,2,3)]=-1;
  chirality_lookup[chi(1,3,0,2)]=-1;
  chirality_lookup[chi(1,2,3,0)]=-1;

  chirality_lookup[chi(2,0,3,1)]=-1;
  chirality_lookup[chi(2,1,0,3)]=-1;
  chirality_lookup[chi(2,3,1,0)]=-1;

  chirality_lookup[chi(3,2,0,1)]=-1;
  chirality_lookup[chi(3,1,2,0)]=-1;
  chirality_lookup[chi(3,0,1,2)]=-1;
  
}

int ChiralHandedness(int *a)
{
  int idx[4],ord[4];
  int result;
  SortIntIndex(4,a,idx);
  ord[idx[0]]=0;
  ord[idx[1]]=1;
  ord[idx[2]]=2;
  ord[idx[3]]=3;
  result = chirality_lookup[chi(ord[0],ord[1],ord[2],ord[3])];
  /* printf("%d %d %d %d => %d\n",ord[0],ord[1],ord[2],ord[3],result);*/
  return(result);
  
}

#if 0

main()
{
  int a;
  int val[][4] = {
    {1,10,50,60},
    {2,9,6,12},
    {12,1,2,7},
    {2,10,6,9},
    {1,12,6,3},
  };
  ChiralInit();
  for(a=0;a<5;a++) {
    printf("%d %d %d %d => %d\n\n",
           val[a][0],val[a][1],val[a][2],val[a][3],
           ChiralHandedness(val[a]));

  }
}

#endif