1; File: "nucleic2.scm"
2;
3; Author: Marc Feeley (feeley@iro.umontreal.ca)
4; Last modification by Feeley: June 6, 1994.
5; Modified for R5RS Scheme by William D Clinger: 22 October 1996.
6; Last modification by Clinger: 19 March 1999.
7;
8; This program is a modified version of the program described in
9;
10;   M. Feeley, M. Turcotte, G. Lapalme.  Using Multilisp for Solving
11;   Constraint Satisfaction Problems: an Application to Nucleic Acid 3D
12;   Structure Determination.  Lisp and Symbolic Computation 7(2/3),
13;   231-246, 1994.
14;
15; The differences between this program and the original are described in
16;
17;   P.H. Hartel, M. Feeley, et al.  Benchmarking Implementations of
18;   Functional Languages with "Pseudoknot", a Float-Intensive Benchmark.
19;   Journal of Functional Programming 6(4), 621-655, 1996.
20
21; This procedure uses Marc Feeley's run-benchmark procedure to time
22; the benchmark.
23
24(define (nucleic2-benchmark . rest)
25  (let ((n (if (null? rest) 1 (car rest))))
26    (run-benchmark (string-append "nucleic2"
27                                  (if (> n 1)
28                                      (string-append " ("
29                                                     (number->string n)
30                                                     " iterations)")
31                                      ""))
32                   n
33                   run
34                   (lambda (x)
35                     (and (number? x)
36                          (real? x)
37                          (< (abs (- x 33.797594890762696)) 0.01))))))
38
39; PORTABILITY.
40;
41; This program should run in any R5RS-conforming implementation of Scheme.
42; To run this program in an implementation that does not support the R5RS
43; macro system, however, you will have to place a single quotation mark (')
44; on the following line and also modify the "SYSTEM DEPENDENT CODE" below.
45
46; ********** R5RS Scheme
47
48(begin
49
50(define-syntax FLOAT+    (syntax-rules () ((FLOAT+ x ...) (+ x ...))))
51(define-syntax FLOAT-    (syntax-rules () ((FLOAT- x ...) (- x ...))))
52(define-syntax FLOAT*    (syntax-rules () ((FLOAT* x ...) (* x ...))))
53(define-syntax FLOAT/    (syntax-rules () ((FLOAT/ x ...) (/ x ...))))
54(define-syntax FLOAT=    (syntax-rules () ((FLOAT=  x y)  (=  x y))))
55(define-syntax FLOAT<    (syntax-rules () ((FLOAT<  x y)  (<  x y))))
56(define-syntax FLOAT<=   (syntax-rules () ((FLOAT<= x y)  (<= x y))))
57(define-syntax FLOAT>    (syntax-rules () ((FLOAT>  x y)  (>  x y))))
58(define-syntax FLOAT>=   (syntax-rules () ((FLOAT>= x y)  (>= x y))))
59(define-syntax FLOATsin  (syntax-rules () ((FLOATsin  x)  (sin  x))))
60(define-syntax FLOATcos  (syntax-rules () ((FLOATcos  x)  (cos  x))))
61(define-syntax FLOATatan (syntax-rules () ((FLOATatan x)  (atan x))))
62(define-syntax FLOATsqrt (syntax-rules () ((FLOATsqrt x)  (sqrt x))))
63
64(define-syntax FUTURE    (syntax-rules () ((FUTURE x) x)))
65(define-syntax TOUCH     (syntax-rules () ((TOUCH x)  x)))
66
67(define-syntax def-macro  (syntax-rules () ((def-macro stuff ...) #t)))
68(define-syntax def-struct (syntax-rules () ((def-macro stuff ...) #t)))
69(define-syntax def-nuc    (syntax-rules () ((def-nuc   stuff ...) #t)))
70
71(define-syntax define-structure
72  (syntax-rules ()
73    ((define-structure #f
74       name make make-constant (select1 ...) (set1 ...))
75     (begin (define-syntax make
76              (syntax-rules ()
77                ((make select1 ...)
78                 (vector select1 ...))))
79            (define-syntax make-constant
80              (syntax-rules ()
81                ; The vectors that are passed to make-constant aren't quoted.
82                ((make-constant . args)
83                 (constant-maker make . args))))
84            (define-selectors (select1 ...)
85                              (0 1 2 3 4 5 6 7 8 9
86                               10 11 12 13 14 15 16 17 18 19
87                               20 21 22 23 24 25 26 27 28 29
88                               30 31 32 33 34 35 36 37 38 39
89                               40 41 42 43 44 45 46 47 48 49))
90            (define-setters   (set1 ...)
91                              (0 1 2 3 4 5 6 7 8 9
92                               10 11 12 13 14 15 16 17 18 19
93                               20 21 22 23 24 25 26 27 28 29
94                               30 31 32 33 34 35 36 37 38 39
95                               40 41 42 43 44 45 46 47 48 49))))
96    ((define-structure pred?
97       name make make-constant (select1 ...) (set1 ...))
98     (begin (define-syntax pred?
99              (syntax-rules ()
100                ((pred? v)
101                 (and (vector? v) (eq? (vector-ref v 0) 'name)))))
102            (define-syntax make
103              (syntax-rules ()
104                ((make select1 ...)
105                 (vector 'name select1 ...))))
106            (define-syntax make-constant
107              (syntax-rules ()
108                ; The vectors that are passed to make-constant aren't quoted.
109                ((make-constant . args)
110                 (constant-maker make . args))))
111            (define-selectors (select1 ...)
112                              (1 2 3 4 5 6 7 8 9
113                               10 11 12 13 14 15 16 17 18 19
114                               20 21 22 23 24 25 26 27 28 29
115                               30 31 32 33 34 35 36 37 38 39
116                               40 41 42 43 44 45 46 47 48 49))
117            (define-setters   (set1 ...)
118                              (1 2 3 4 5 6 7 8 9
119                               10 11 12 13 14 15 16 17 18 19
120                               20 21 22 23 24 25 26 27 28 29
121                               30 31 32 33 34 35 36 37 38 39
122                               40 41 42 43 44 45 46 47 48 49))))))
123(define-syntax constant-maker
124  (syntax-rules ()
125    ; The quotation marks are added here.
126    ((constant-maker make arg ...)
127     (make 'arg ...))))
128(define-syntax define-selectors
129  (syntax-rules ()
130    ((define-selectors (select) (i i1 ...))
131     (define-syntax select
132       (syntax-rules ()
133         ((select v) (vector-ref v i)))))
134    ((define-selectors (select select1 ...) (i i1 ...))
135     (begin (define-syntax select
136              (syntax-rules ()
137                ((select v) (vector-ref v i))))
138            (define-selectors (select1 ...) (i1 ...))))))
139(define-syntax define-setters
140  (syntax-rules ()
141    ((define-setters (set) (i i1 ...))
142     (define-syntax set
143       (syntax-rules ()
144         ((set v x) (vector-set! v i x)))))
145    ((define-setters (set set1 ...) (i i1 ...))
146     (begin (define-syntax set
147              (syntax-rules ()
148                ((set v x) (vector-set! v i x))))
149            (define-setters (set1 ...) (i1 ...))))))
150
151(define-structure #f pt
152  make-pt make-constant-pt
153  (pt-x pt-y pt-z)
154  (pt-x-set! pt-y-set! pt-z-set!))
155
156(define-structure #f tfo
157  make-tfo make-constant-tfo
158  (tfo-a tfo-b tfo-c tfo-d tfo-e tfo-f tfo-g tfo-h tfo-i tfo-tx tfo-ty tfo-tz)
159  (tfo-a-set! tfo-b-set! tfo-c-set! tfo-d-set! tfo-e-set! tfo-f-set!
160   tfo-g-set! tfo-h-set! tfo-i-set! tfo-tx-set! tfo-ty-set! tfo-tz-set!))
161
162(define-structure nuc? nuc
163  make-nuc make-constant-nuc
164  (nuc-dgf-base-tfo  ; defines the standard position for wc and wc-dumas
165   nuc-P-O3*-275-tfo ; defines the standard position for the connect function
166   nuc-P-O3*-180-tfo
167   nuc-P-O3*-60-tfo
168   nuc-P nuc-O1P nuc-O2P nuc-O5* nuc-C5*
169   nuc-H5* nuc-H5**
170   nuc-C4* nuc-H4* nuc-O4* nuc-C1* nuc-H1*
171   nuc-C2* nuc-H2**
172   nuc-O2* nuc-H2* nuc-C3* nuc-H3* nuc-O3*
173   nuc-N1 nuc-N3 nuc-C2 nuc-C4 nuc-C5 nuc-C6)
174  (nuc-dgf-base-tfo-set!
175   nuc-P-O3*-275-tfo-set!
176   nuc-P-O3*-180-tfo-set!
177   nuc-P-O3*-60-tfo-set!
178   nuc-P-set! nuc-O1P-set! nuc-O2P-set! nuc-O5*-set! nuc-C5*-set!
179   nuc-H5*-set! nuc-H5**-set!
180   nuc-C4*-set! nuc-H4*-set! nuc-O4*-set! nuc-C1*-set! nuc-H1*-set!
181   nuc-C2*-set! nuc-H2**-set!
182   nuc-O2*-set! nuc-H2*-set! nuc-C3*-set! nuc-H3*-set! nuc-O3*-set!
183   nuc-N1-set! nuc-N3-set! nuc-C2-set! nuc-C4-set! nuc-C5-set! nuc-C6-set!))
184
185(define-structure rA? rA
186  make-rA make-constant-rA
187  (nuc-dgf-base-tfo  ; defines the standard position for wc and wc-dumas
188   nuc-P-O3*-275-tfo ; defines the standard position for the connect function
189   nuc-P-O3*-180-tfo
190   nuc-P-O3*-60-tfo
191   nuc-P nuc-O1P nuc-O2P nuc-O5* nuc-C5*
192   nuc-H5* nuc-H5**
193   nuc-C4* nuc-H4* nuc-O4* nuc-C1* nuc-H1*
194   nuc-C2* nuc-H2**
195   nuc-O2* nuc-H2* nuc-C3* nuc-H3* nuc-O3*
196   nuc-N1 nuc-N3 nuc-C2 nuc-C4 nuc-C5 nuc-C6
197   rA-N6 rA-N7 rA-N9 rA-C8
198   rA-H2 rA-H61 rA-H62 rA-H8)
199  (nuc-dgf-base-tfo-set!
200   nuc-P-O3*-275-tfo-set!
201   nuc-P-O3*-180-tfo-set!
202   nuc-P-O3*-60-tfo-set!
203   nuc-P-set! nuc-O1P-set! nuc-O2P-set! nuc-O5*-set! nuc-C5*-set!
204   nuc-H5*-set! nuc-H5**-set!
205   nuc-C4*-set! nuc-H4*-set! nuc-O4*-set! nuc-C1*-set! nuc-H1*-set!
206   nuc-C2*-set! nuc-H2**-set!
207   nuc-O2*-set! nuc-H2*-set! nuc-C3*-set! nuc-H3*-set! nuc-O3*-set!
208   nuc-N1-set! nuc-N3-set! nuc-C2-set! nuc-C4-set! nuc-C5-set! nuc-C6-set!
209   rA-N6-set! rA-N7-set! rA-N9-set! rA-C8-set!
210   rA-H2-set! rA-H61-set! rA-H62-set! rA-H8-set!))
211
212(define-structure rC? rC
213  make-rC make-constant-rC
214  (nuc-dgf-base-tfo  ; defines the standard position for wc and wc-dumas
215   nuc-P-O3*-275-tfo ; defines the standard position for the connect function
216   nuc-P-O3*-180-tfo
217   nuc-P-O3*-60-tfo
218   nuc-P nuc-O1P nuc-O2P nuc-O5* nuc-C5*
219   nuc-H5* nuc-H5**
220   nuc-C4* nuc-H4* nuc-O4* nuc-C1* nuc-H1*
221   nuc-C2* nuc-H2**
222   nuc-O2* nuc-H2* nuc-C3* nuc-H3* nuc-O3*
223   nuc-N1 nuc-N3 nuc-C2 nuc-C4 nuc-C5 nuc-C6
224   rC-N4 rC-O2 rC-H41 rC-H42 rC-H5 rC-H6)
225  (nuc-dgf-base-tfo-set!
226   nuc-P-O3*-275-tfo-set!
227   nuc-P-O3*-180-tfo-set!
228   nuc-P-O3*-60-tfo-set!
229   nuc-P-set! nuc-O1P-set! nuc-O2P-set! nuc-O5*-set! nuc-C5*-set!
230   nuc-H5*-set! nuc-H5**-set!
231   nuc-C4*-set! nuc-H4*-set! nuc-O4*-set! nuc-C1*-set! nuc-H1*-set!
232   nuc-C2*-set! nuc-H2**-set!
233   nuc-O2*-set! nuc-H2*-set! nuc-C3*-set! nuc-H3*-set! nuc-O3*-set!
234   nuc-N1-set! nuc-N3-set! nuc-C2-set! nuc-C4-set! nuc-C5-set! nuc-C6-set!
235   rC-N4-set! rC-O2-set! rC-H41-set! rC-H42-set! rC-H5-set! rC-H6-set!))
236
237(define-structure rG? rG
238  make-rG make-constant-rG
239  (nuc-dgf-base-tfo  ; defines the standard position for wc and wc-dumas
240   nuc-P-O3*-275-tfo ; defines the standard position for the connect function
241   nuc-P-O3*-180-tfo
242   nuc-P-O3*-60-tfo
243   nuc-P nuc-O1P nuc-O2P nuc-O5* nuc-C5*
244   nuc-H5* nuc-H5**
245   nuc-C4* nuc-H4* nuc-O4* nuc-C1* nuc-H1*
246   nuc-C2* nuc-H2**
247   nuc-O2* nuc-H2* nuc-C3* nuc-H3* nuc-O3*
248   nuc-N1 nuc-N3 nuc-C2 nuc-C4 nuc-C5 nuc-C6
249   rG-N2 rG-N7 rG-N9 rG-C8 rG-O6
250   rG-H1 rG-H21 rG-H22 rG-H8)
251  (nuc-dgf-base-tfo-set!
252   nuc-P-O3*-275-tfo-set!
253   nuc-P-O3*-180-tfo-set!
254   nuc-P-O3*-60-tfo-set!
255   nuc-P-set! nuc-O1P-set! nuc-O2P-set! nuc-O5*-set! nuc-C5*-set!
256   nuc-H5*-set! nuc-H5**-set!
257   nuc-C4*-set! nuc-H4*-set! nuc-O4*-set! nuc-C1*-set! nuc-H1*-set!
258   nuc-C2*-set! nuc-H2**-set!
259   nuc-O2*-set! nuc-H2*-set! nuc-C3*-set! nuc-H3*-set! nuc-O3*-set!
260   nuc-N1-set! nuc-N3-set! nuc-C2-set! nuc-C4-set! nuc-C5-set! nuc-C6-set!
261   rG-N2-set! rG-N7-set! rG-N9-set! rG-C8-set! rG-O6-set!
262   rG-H1-set! rG-H21-set! rG-H22-set! rG-H8-set!))
263
264(define-structure rU? rU
265  make-rU make-constant-rU
266  (nuc-dgf-base-tfo  ; defines the standard position for wc and wc-dumas
267   nuc-P-O3*-275-tfo ; defines the standard position for the connect function
268   nuc-P-O3*-180-tfo
269   nuc-P-O3*-60-tfo
270   nuc-P nuc-O1P nuc-O2P nuc-O5* nuc-C5*
271   nuc-H5* nuc-H5**
272   nuc-C4* nuc-H4* nuc-O4* nuc-C1* nuc-H1*
273   nuc-C2* nuc-H2**
274   nuc-O2* nuc-H2* nuc-C3* nuc-H3* nuc-O3*
275   nuc-N1 nuc-N3 nuc-C2 nuc-C4 nuc-C5 nuc-C6
276   rU-O2 rU-O4 rU-H3 rU-H5 rU-H6)
277  (nuc-dgf-base-tfo-set!
278   nuc-P-O3*-275-tfo-set!
279   nuc-P-O3*-180-tfo-set!
280   nuc-P-O3*-60-tfo-set!
281   nuc-P-set! nuc-O1P-set! nuc-O2P-set! nuc-O5*-set! nuc-C5*-set!
282   nuc-H5*-set! nuc-H5**-set!
283   nuc-C4*-set! nuc-H4*-set! nuc-O4*-set! nuc-C1*-set! nuc-H1*-set!
284   nuc-C2*-set! nuc-H2**-set!
285   nuc-O2*-set! nuc-H2*-set! nuc-C3*-set! nuc-H3*-set! nuc-O3*-set!
286   nuc-N1-set! nuc-N3-set! nuc-C2-set! nuc-C4-set! nuc-C5-set! nuc-C6-set!
287   rU-O2-set! rU-O4-set! rU-H3-set! rU-H5-set! rU-H6-set!))
288
289(define-structure #f var
290  make-var make-constant-var
291  (var-id var-tfo var-nuc)
292  (var-id-set! var-tfo-set! var-nuc-set!))
293
294; Comment out the next three syntax definitions if you want
295; lazy computation.
296
297(define-syntax mk-var
298  (syntax-rules ()
299    ((mk-var i tfo nuc)
300     (make-var i tfo nuc))))
301
302(define-syntax absolute-pos
303  (syntax-rules ()
304    ((absolute-pos var p)
305     (tfo-apply (var-tfo var) p))))
306
307(define-syntax lazy-computation-of
308  (syntax-rules ()
309    ((lazy-computation-of expr)
310     expr)))
311
312; Uncomment the next three syntax definitions if you want
313; lazy computation.
314
315; (define-syntax mk-var
316;   (syntax-rules ()
317;     ((mk-var i tfo nuc)
318;      (make-var i tfo (make-relative-nuc tfo nuc)))))
319;
320; (define-syntax absolute-pos
321;   (syntax-rules ()
322;     ((absolute-pos var p)
323;      (force p))))
324;
325; (define-syntax lazy-computation-of
326;   (syntax-rules ()
327;     ((lazy-computation-of expr)
328;      (delay expr))))
329
330(define-syntax atom-pos
331  (syntax-rules ()
332    ((atom-pos atom var)
333     (let ((v var))
334       (absolute-pos v (atom (var-nuc v)))))))
335
336)
337
338; -- SYSTEM DEPENDENT CODE ----------------------------------------------------
339
340; The code in this section is not portable.  It must be adapted to
341; the Scheme system you are using.
342
343; ********** GAMBIT 2.2
344
345'; Add a single-quote at the start of this line if you are NOT using Gambit
346(begin
347
348(declare             ; Compiler declarations for fast code:
349 (multilisp)         ; - Enable the FUTURE special-form
350 (block)             ; - Assume this file contains the entire program
351 (standard-bindings) ; - Assume standard bindings (this permits open-coding)
352 (extended-bindings) ; - Same for extensions (such as "##flonum.+")
353 (fixnum)            ; - Use fixnum arithmetic by default
354 (not safe)          ; - Remove all runtime type checks
355)
356
357(define-macro (def-macro form . body)
358  `(DEFINE-MACRO ,form (LET () ,@body)))
359
360(def-macro (FLOAT+ x . l) `(,(string->symbol "##flonum.+") ,x ,@l))
361(def-macro (FLOAT- x . l) `(,(string->symbol "##flonum.-") ,x ,@l))
362(def-macro (FLOAT* x . l) `(,(string->symbol "##flonum.*") ,x ,@l))
363(def-macro (FLOAT/ x . l) `(,(string->symbol "##flonum./") ,x ,@l))
364(def-macro (FLOAT=   x y) `(,(string->symbol "##flonum.=") ,x ,y))
365(def-macro (FLOAT<   x y) `(,(string->symbol "##flonum.<") ,x ,y))
366(def-macro (FLOAT<=  x y) `(not (,(string->symbol "##flonum.<") ,y ,x)))
367(def-macro (FLOAT>   x y) `(,(string->symbol "##flonum.<") ,y ,x))
368(def-macro (FLOAT>=  x y) `(not (,(string->symbol "##flonum.<") ,x ,y)))
369(def-macro (FLOATsin   x) `(,(string->symbol "##flonum.sin")  ,x))
370(def-macro (FLOATcos   x) `(,(string->symbol "##flonum.cos")  ,x))
371(def-macro (FLOATatan  x) `(,(string->symbol "##flonum.atan") ,x))
372(def-macro (FLOATsqrt  x) `(,(string->symbol "##flonum.sqrt") ,x))
373)
374
375; ********** MIT-SCHEME
376
377'; Remove the single-quote from this line if you are using MIT-Scheme
378(begin
379
380(declare (usual-integrations))
381
382(define-macro (def-macro form . body)
383  `(DEFINE-MACRO ,form (LET () ,@body)))
384
385(def-macro (nary-function op1 op2 args)
386  (if (null? (cdr args))
387    `(,op1 ,@args)
388    (let loop ((args args))
389      (if (null? (cdr args))
390        (car args)
391        (loop (cons (list op2 (car args) (cadr args)) (cddr args)))))))
392
393(def-macro (FLOAT+ x . l) `(nary-function begin      flo:+ ,(cons x l)))
394(def-macro (FLOAT- x . l) `(nary-function flo:negate flo:- ,(cons x l)))
395(def-macro (FLOAT* x . l) `(nary-function begin      flo:* ,(cons x l)))
396(def-macro (FLOAT/ x . l) `(nary-function error      flo:/ ,(cons x l)))
397(def-macro (FLOAT=   x y) `(flo:= ,x ,y))
398(def-macro (FLOAT<   x y) `(flo:< ,x ,y))
399(def-macro (FLOAT<=  x y) `(not (flo:< ,y ,x)))
400(def-macro (FLOAT>   x y) `(flo:< ,y ,x))
401(def-macro (FLOAT>=  x y) `(not (flo:< ,x ,y)))
402(def-macro (FLOATsin   x) `(flo:sin  ,x))
403(def-macro (FLOATcos   x) `(flo:cos  ,x))
404(def-macro (FLOATatan  x) `(flo:atan ,x))
405(def-macro (FLOATsqrt  x) `(flo:sqrt ,x))
406
407(def-macro (FUTURE x) x)
408(def-macro (TOUCH x) x)
409)
410
411; ********** SCM
412
413'; Remove the single-quote from this line if you are using SCM
414(begin
415
416(defmacro def-macro (form . body)
417  `(DEFMACRO ,(car form) ,(cdr form) (LET () ,@body)))
418
419(def-macro (FLOAT+ x . l) `(+ ,x ,@l))
420(def-macro (FLOAT- x . l) `(- ,x ,@l))
421(def-macro (FLOAT* x . l) `(* ,x ,@l))
422(def-macro (FLOAT/ x . l) `(/ ,x ,@l))
423(def-macro (FLOAT=   x y) `(= ,x ,y))
424(def-macro (FLOAT<   x y) `(< ,x ,y))
425(def-macro (FLOAT<=  x y) `(not (< ,y ,x)))
426(def-macro (FLOAT>   x y) `(< ,y ,x))
427(def-macro (FLOAT>=  x y) `(not (< ,x ,y)))
428(def-macro (FLOATsin   x) `(sin  ,x))
429(def-macro (FLOATcos   x) `(cos  ,x))
430(def-macro (FLOATatan  x) `(atan ,x))
431(def-macro (FLOATsqrt  x) `(sqrt ,x))
432
433(def-macro (FUTURE x) x)
434(def-macro (TOUCH x) x)
435)
436
437; -- STRUCTURE DEFINITION MACRO -----------------------------------------------
438
439; The macro "def-struct" provides a simple mechanism to define record
440; structures out of vectors.  The first argument to "def-struct" is a boolean
441; indicating whether the vector should be tagged (to allow the type of the
442; structure to be tested).  The second argument is the name of the structure.
443; The remaining arguments are the names of the structure's fields.  A call
444; to "def-struct" defines macros to
445;
446;  1) construct a record object of this type
447;  2) fetch and store each field
448;  3) test a record to see if it is of this type (only if tags are used)
449;  4) define subclasses of this record with additional fields
450;
451; The call "(def-struct #t foo a b c)" will define the following macros:
452;
453;  (make-foo x y)                -- make a record
454;  (make-constant-foo x y)       -- make a record (args must be constants)
455;  (foo? x)                      -- test a record
456;  (foo-a x)                     -- get field "a"
457;  (foo-b x)                     -- get field "b"
458;  (foo-a-set! x y)              -- mutate field "a"
459;  (foo-b-set! x y)              -- mutate field "b"
460;  (def-foo tag? name fields...) -- define subclass of "foo"
461
462(def-macro (def-struct tag? name . fields)
463  `(DEF-SUBSTRUCT () () 0 ,tag? ,name ,@fields))
464
465(def-macro (def-substruct sup-fields sup-tags sup-length tag? name . fields)
466
467  (define (err)
468    (error "Ill-formed `def-substruct'") #f)
469
470  (define (sym . strings)
471    (string->symbol (apply string-append strings)))
472
473  (if (symbol? name)
474    (let* ((name-str (symbol->string name))
475           (tag (sym "." name-str "."))
476           (all-tags (append sup-tags
477                             (if tag?
478                               (list (cons tag sup-length))
479                               '()))))
480      (let loop ((l1 fields)
481                 (l2 '())
482                 (l3 '())
483                 (i (+ sup-length (if tag? 1 0))))
484        (if (pair? l1)
485          (let ((rest (cdr l1)) (field (car l1)))
486            (if (symbol? field)
487              (let* ((field-str (symbol->string field))
488                     (field-ref (sym name-str "-" field-str))
489                     (field-set! (sym name-str "-" field-str "-set!")))
490                (loop rest
491                      (cons `(DEF-MACRO (,field-set! X Y)
492                               `(VECTOR-SET! ,X ,,i ,Y))
493                            (cons `(DEF-MACRO (,field-ref X)
494                                     `(VECTOR-REF ,X ,,i))
495                                  l2))
496                      (cons (cons field i) l3)
497                      (+ i 1)))
498              (err)))
499          (let ((all-fields (append sup-fields (reverse l3))))
500            `(BEGIN
501               ,@l2
502               (DEFINE ,(sym "fields-of-" name-str)
503                 ',all-fields)
504               (DEF-MACRO (,(sym "def-" name-str) TAG? NAME . FIELDS)
505                 `(DEF-SUBSTRUCT ,',all-fields ,',all-tags ,',i
506                                 ,TAG? ,NAME ,@FIELDS))
507               (DEF-MACRO (,(sym "make-constant-" name-str) . REST)
508                 (DEFINE (ADD-TAGS I TAGS LST)
509                   (COND ((NULL? TAGS)
510                          LST)
511                         ((= I (CDAR TAGS))
512                          (CONS (CAAR TAGS)
513                                (ADD-TAGS (+ I 1) (CDR TAGS) LST)))
514                         (ELSE
515                          (CONS (CAR LST)
516                                (ADD-TAGS (+ I 1) TAGS (CDR LST))))))
517                 `'#(,@(ADD-TAGS 0 ',all-tags REST)))
518               (DEF-MACRO (,(sym "make-" name-str) . REST)
519                 (DEFINE (ADD-TAGS I TAGS LST)
520                   (COND ((NULL? TAGS)
521                          LST)
522                         ((= I (CDAR TAGS))
523                          (CONS `',(CAAR TAGS)
524                                (ADD-TAGS (+ I 1) (CDR TAGS) LST)))
525                         (ELSE
526                          (CONS (CAR LST)
527                                (ADD-TAGS (+ I 1) TAGS (CDR LST))))))
528                 `(VECTOR ,@(ADD-TAGS 0 ',all-tags REST)))
529               ,@(if tag?
530                   `((DEF-MACRO (,(sym name-str "?") X)
531                       `(EQ? (VECTOR-REF ,X ,,sup-length) ',',tag)))
532                   '())
533               ',name)))))
534    (err)))
535
536; -- MATH UTILITIES -----------------------------------------------------------
537
538(define constant-pi          3.14159265358979323846)
539(define constant-minus-pi   -3.14159265358979323846)
540(define constant-pi/2        1.57079632679489661923)
541(define constant-minus-pi/2 -1.57079632679489661923)
542
543(define (math-atan2 y x)
544  (cond ((FLOAT> x 0.0)
545         (FLOATatan (FLOAT/ y x)))
546        ((FLOAT< y 0.0)
547         (if (FLOAT= x 0.0)
548           constant-minus-pi/2
549           (FLOAT+ (FLOATatan (FLOAT/ y x)) constant-minus-pi)))
550        (else
551         (if (FLOAT= x 0.0)
552           constant-pi/2
553           (FLOAT+ (FLOATatan (FLOAT/ y x)) constant-pi)))))
554
555; -- POINTS -------------------------------------------------------------------
556
557(def-struct #f pt x y z)
558
559(define (pt-sub p1 p2)
560  (make-pt (FLOAT- (pt-x p1) (pt-x p2))
561           (FLOAT- (pt-y p1) (pt-y p2))
562           (FLOAT- (pt-z p1) (pt-z p2))))
563
564(define (pt-dist p1 p2)
565  (let ((dx (FLOAT- (pt-x p1) (pt-x p2)))
566        (dy (FLOAT- (pt-y p1) (pt-y p2)))
567        (dz (FLOAT- (pt-z p1) (pt-z p2))))
568    (FLOATsqrt (FLOAT+ (FLOAT* dx dx) (FLOAT* dy dy) (FLOAT* dz dz)))))
569
570(define (pt-phi p)
571  (let* ((x (pt-x p))
572         (y (pt-y p))
573         (z (pt-z p))
574         (b (math-atan2 x z)))
575    (math-atan2 (FLOAT+ (FLOAT* (FLOATcos b) z) (FLOAT* (FLOATsin b) x)) y)))
576
577(define (pt-theta p)
578  (math-atan2 (pt-x p) (pt-z p)))
579
580; -- COORDINATE TRANSFORMATIONS -----------------------------------------------
581
582; The notation for the transformations follows "Paul, R.P. (1981) Robot
583; Manipulators.  MIT Press." with the exception that our transformation
584; matrices don't have the perspective terms and are the transpose of
585; Paul's one.  See also "M\"antyl\"a, M. (1985) An Introduction to
586; Solid Modeling, Computer Science Press" Appendix A.
587;
588; The components of a transformation matrix are named like this:
589;
590;  a  b  c
591;  d  e  f
592;  g  h  i
593; tx ty tz
594;
595; The components tx, ty, and tz are the translation vector.
596
597(def-struct #f tfo a b c d e f g h i tx ty tz)
598
599(define tfo-id  ; the identity transformation matrix
600  '#(1.0 0.0 0.0
601     0.0 1.0 0.0
602     0.0 0.0 1.0
603     0.0 0.0 0.0))
604
605; The function "tfo-apply" multiplies a transformation matrix, tfo, by a
606; point vector, p.  The result is a new point.
607
608(define (tfo-apply tfo p)
609  (let ((x (pt-x p))
610        (y (pt-y p))
611        (z (pt-z p)))
612    (make-pt
613     (FLOAT+ (FLOAT* x (tfo-a tfo))
614             (FLOAT* y (tfo-d tfo))
615             (FLOAT* z (tfo-g tfo))
616             (tfo-tx tfo))
617     (FLOAT+ (FLOAT* x (tfo-b tfo))
618             (FLOAT* y (tfo-e tfo))
619             (FLOAT* z (tfo-h tfo))
620             (tfo-ty tfo))
621     (FLOAT+ (FLOAT* x (tfo-c tfo))
622             (FLOAT* y (tfo-f tfo))
623             (FLOAT* z (tfo-i tfo))
624             (tfo-tz tfo)))))
625
626; The function "tfo-combine" multiplies two transformation matrices A and B.
627; The result is a new matrix which cumulates the transformations described
628; by A and B.
629
630(define (tfo-combine A B)
631  (make-tfo
632   (FLOAT+ (FLOAT* (tfo-a A) (tfo-a B))
633           (FLOAT* (tfo-b A) (tfo-d B))
634           (FLOAT* (tfo-c A) (tfo-g B)))
635   (FLOAT+ (FLOAT* (tfo-a A) (tfo-b B))
636           (FLOAT* (tfo-b A) (tfo-e B))
637           (FLOAT* (tfo-c A) (tfo-h B)))
638   (FLOAT+ (FLOAT* (tfo-a A) (tfo-c B))
639           (FLOAT* (tfo-b A) (tfo-f B))
640           (FLOAT* (tfo-c A) (tfo-i B)))
641   (FLOAT+ (FLOAT* (tfo-d A) (tfo-a B))
642           (FLOAT* (tfo-e A) (tfo-d B))
643           (FLOAT* (tfo-f A) (tfo-g B)))
644   (FLOAT+ (FLOAT* (tfo-d A) (tfo-b B))
645           (FLOAT* (tfo-e A) (tfo-e B))
646           (FLOAT* (tfo-f A) (tfo-h B)))
647   (FLOAT+ (FLOAT* (tfo-d A) (tfo-c B))
648           (FLOAT* (tfo-e A) (tfo-f B))
649           (FLOAT* (tfo-f A) (tfo-i B)))
650   (FLOAT+ (FLOAT* (tfo-g A) (tfo-a B))
651           (FLOAT* (tfo-h A) (tfo-d B))
652           (FLOAT* (tfo-i A) (tfo-g B)))
653   (FLOAT+ (FLOAT* (tfo-g A) (tfo-b B))
654           (FLOAT* (tfo-h A) (tfo-e B))
655           (FLOAT* (tfo-i A) (tfo-h B)))
656   (FLOAT+ (FLOAT* (tfo-g A) (tfo-c B))
657           (FLOAT* (tfo-h A) (tfo-f B))
658           (FLOAT* (tfo-i A) (tfo-i B)))
659   (FLOAT+ (FLOAT* (tfo-tx A) (tfo-a B))
660           (FLOAT* (tfo-ty A) (tfo-d B))
661           (FLOAT* (tfo-tz A) (tfo-g B))
662           (tfo-tx B))
663   (FLOAT+ (FLOAT* (tfo-tx A) (tfo-b B))
664           (FLOAT* (tfo-ty A) (tfo-e B))
665           (FLOAT* (tfo-tz A) (tfo-h B))
666           (tfo-ty B))
667   (FLOAT+ (FLOAT* (tfo-tx A) (tfo-c B))
668           (FLOAT* (tfo-ty A) (tfo-f B))
669           (FLOAT* (tfo-tz A) (tfo-i B))
670           (tfo-tz B))))
671
672; The function "tfo-inv-ortho" computes the inverse of a homogeneous
673; transformation matrix.
674
675(define (tfo-inv-ortho tfo)
676  (let* ((tx (tfo-tx tfo))
677         (ty (tfo-ty tfo))
678         (tz (tfo-tz tfo)))
679    (make-tfo
680     (tfo-a tfo) (tfo-d tfo) (tfo-g tfo)
681     (tfo-b tfo) (tfo-e tfo) (tfo-h tfo)
682     (tfo-c tfo) (tfo-f tfo) (tfo-i tfo)
683     (FLOAT- (FLOAT+ (FLOAT* (tfo-a tfo) tx)
684                     (FLOAT* (tfo-b tfo) ty)
685                     (FLOAT* (tfo-c tfo) tz)))
686     (FLOAT- (FLOAT+ (FLOAT* (tfo-d tfo) tx)
687                     (FLOAT* (tfo-e tfo) ty)
688                     (FLOAT* (tfo-f tfo) tz)))
689     (FLOAT- (FLOAT+ (FLOAT* (tfo-g tfo) tx)
690                     (FLOAT* (tfo-h tfo) ty)
691                     (FLOAT* (tfo-i tfo) tz))))))
692
693; Given three points p1, p2, and p3, the function "tfo-align" computes
694; a transformation matrix such that point p1 gets mapped to (0,0,0), p2 gets
695; mapped to the Y axis and p3 gets mapped to the YZ plane.
696
697(define (tfo-align p1 p2 p3)
698  (let* ((x1 (pt-x p1))       (y1 (pt-y p1))       (z1 (pt-z p1))
699         (x3 (pt-x p3))       (y3 (pt-y p3))       (z3 (pt-z p3))
700         (x31 (FLOAT- x3 x1)) (y31 (FLOAT- y3 y1)) (z31 (FLOAT- z3 z1))
701         (rotpY (pt-sub p2 p1))
702         (Phi (pt-phi rotpY))
703         (Theta (pt-theta rotpY))
704         (sinP (FLOATsin Phi))
705         (sinT (FLOATsin Theta))
706         (cosP (FLOATcos Phi))
707         (cosT (FLOATcos Theta))
708         (sinPsinT (FLOAT* sinP sinT))
709         (sinPcosT (FLOAT* sinP cosT))
710         (cosPsinT (FLOAT* cosP sinT))
711         (cosPcosT (FLOAT* cosP cosT))
712         (rotpZ
713          (make-pt
714           (FLOAT- (FLOAT* cosT x31)
715                   (FLOAT* sinT z31))
716           (FLOAT+ (FLOAT* sinPsinT x31)
717                   (FLOAT* cosP y31)
718                   (FLOAT* sinPcosT z31))
719           (FLOAT+ (FLOAT* cosPsinT x31)
720                   (FLOAT- (FLOAT* sinP y31))
721                   (FLOAT* cosPcosT z31))))
722         (Rho (pt-theta rotpZ))
723         (cosR (FLOATcos Rho))
724         (sinR (FLOATsin Rho))
725         (x (FLOAT+ (FLOAT- (FLOAT* x1 cosT))
726                    (FLOAT* z1 sinT)))
727         (y (FLOAT- (FLOAT- (FLOAT- (FLOAT* x1 sinPsinT))
728                            (FLOAT* y1 cosP))
729                    (FLOAT* z1 sinPcosT)))
730         (z (FLOAT- (FLOAT+ (FLOAT- (FLOAT* x1 cosPsinT))
731                            (FLOAT* y1 sinP))
732                    (FLOAT* z1 cosPcosT))))
733    (make-tfo
734     (FLOAT- (FLOAT* cosT cosR) (FLOAT* cosPsinT sinR))
735     sinPsinT
736     (FLOAT+ (FLOAT* cosT sinR) (FLOAT* cosPsinT cosR))
737     (FLOAT* sinP sinR)
738     cosP
739     (FLOAT- (FLOAT* sinP cosR))
740     (FLOAT- (FLOAT- (FLOAT* sinT cosR)) (FLOAT* cosPcosT sinR))
741     sinPcosT
742     (FLOAT+ (FLOAT- (FLOAT* sinT sinR)) (FLOAT* cosPcosT cosR))
743     (FLOAT- (FLOAT* x cosR) (FLOAT* z sinR))
744     y
745     (FLOAT+ (FLOAT* x sinR) (FLOAT* z cosR)))))
746
747; -- NUCLEIC ACID CONFORMATIONS DATA BASE -------------------------------------
748
749; Numbering of atoms follows the paper:
750;
751; IUPAC-IUB Joint Commission on Biochemical Nomenclature (JCBN)
752; (1983) Abbreviations and Symbols for the Description of
753; Conformations of Polynucleotide Chains.  Eur. J. Biochem 131,
754; 9-15.
755;
756; In the atom names, we have used "*" instead of "'".
757
758; Define part common to all 4 nucleotide types.
759
760(def-struct #f nuc
761  dgf-base-tfo  ; defines the standard position for wc and wc-dumas
762  P-O3*-275-tfo ; defines the standard position for the connect function
763  P-O3*-180-tfo
764  P-O3*-60-tfo
765  P O1P O2P O5* C5* H5* H5** C4* H4* O4* C1* H1* C2* H2** O2* H2* C3*
766  H3* O3* N1 N3 C2 C4 C5 C6)
767
768; Define remaining atoms for each nucleotide type.
769
770(def-nuc #t rA N6 N7 N9 C8 H2 H61 H62 H8)
771(def-nuc #t rC N4 O2 H41 H42 H5 H6)
772(def-nuc #t rG N2 N7 N9 C8 O6 H1 H21 H22 H8)
773(def-nuc #t rU O2 O4 H3 H5 H6)
774
775; Database of nucleotide conformations:
776
777(define rA
778  (make-constant-rA
779    #( -0.0018  -0.8207   0.5714  ; dgf-base-tfo
780        0.2679  -0.5509  -0.7904
781        0.9634   0.1517   0.2209
782        0.0073   8.4030   0.6232)
783    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
784       -0.0433  -0.4257   0.9038
785       -0.5788   0.7480   0.3246
786        1.5227   6.9114  -7.0765)
787    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
788        0.4552   0.6637   0.5935
789       -0.8042   0.0203   0.5941
790       -6.9472  -4.1186  -5.9108)
791    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
792       -0.8247   0.5587  -0.0878
793        0.0426   0.2162   0.9754
794        6.2694  -7.0540   3.3316)
795    #(  2.8930   8.5380  -3.3280) ; P
796    #(  1.6980   7.6960  -3.5570) ; O1P
797    #(  3.2260   9.5010  -4.4020) ; O2P
798    #(  4.1590   7.6040  -3.0340) ; O5*
799    #(  5.4550   8.2120  -2.8810) ; C5*
800    #(  5.4546   8.8508  -1.9978) ; H5*
801    #(  5.7588   8.6625  -3.8259) ; H5**
802    #(  6.4970   7.1480  -2.5980) ; C4*
803    #(  7.4896   7.5919  -2.5214) ; H4*
804    #(  6.1630   6.4860  -1.3440) ; O4*
805    #(  6.5400   5.1200  -1.4190) ; C1*
806    #(  7.2763   4.9681  -0.6297) ; H1*
807    #(  7.1940   4.8830  -2.7770) ; C2*
808    #(  6.8667   3.9183  -3.1647) ; H2**
809    #(  8.5860   5.0910  -2.6140) ; O2*
810    #(  8.9510   4.7626  -1.7890) ; H2*
811    #(  6.5720   6.0040  -3.6090) ; C3*
812    #(  5.5636   5.7066  -3.8966) ; H3*
813    #(  7.3801   6.3562  -4.7350) ; O3*
814    #(  4.7150   0.4910  -0.1360) ; N1
815    #(  6.3490   2.1730  -0.6020) ; N3
816    #(  5.9530   0.9650  -0.2670) ; C2
817    #(  5.2900   2.9790  -0.8260) ; C4
818    #(  3.9720   2.6390  -0.7330) ; C5
819    #(  3.6770   1.3160  -0.3660) ; C6
820    #(  2.4280   0.8450  -0.2360) ; N6
821    #(  3.1660   3.7290  -1.0360) ; N7
822    #(  5.3170   4.2990  -1.1930) ; N9
823    #(  4.0100   4.6780  -1.2990) ; C8
824    #(  6.6890   0.1903  -0.0518) ; H2
825    #(  1.6470   1.4460  -0.4040) ; H61
826    #(  2.2780  -0.1080  -0.0280) ; H62
827    #(  3.4421   5.5744  -1.5482) ; H8
828  ))
829
830(define rA01
831  (make-constant-rA
832    #( -0.0043  -0.8175   0.5759  ; dgf-base-tfo
833        0.2617  -0.5567  -0.7884
834        0.9651   0.1473   0.2164
835        0.0359   8.3929   0.5532)
836    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
837       -0.0433  -0.4257   0.9038
838       -0.5788   0.7480   0.3246
839        1.5227   6.9114  -7.0765)
840    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
841        0.4552   0.6637   0.5935
842       -0.8042   0.0203   0.5941
843       -6.9472  -4.1186  -5.9108)
844    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
845       -0.8247   0.5587  -0.0878
846        0.0426   0.2162   0.9754
847        6.2694  -7.0540   3.3316)
848    #(  2.8930   8.5380  -3.3280) ; P
849    #(  1.6980   7.6960  -3.5570) ; O1P
850    #(  3.2260   9.5010  -4.4020) ; O2P
851    #(  4.1590   7.6040  -3.0340) ; O5*
852    #(  5.4352   8.2183  -2.7757) ; C5*
853    #(  5.3830   8.7883  -1.8481) ; H5*
854    #(  5.7729   8.7436  -3.6691) ; H5**
855    #(  6.4830   7.1518  -2.5252) ; C4*
856    #(  7.4749   7.5972  -2.4482) ; H4*
857    #(  6.1626   6.4620  -1.2827) ; O4*
858    #(  6.5431   5.0992  -1.3905) ; C1*
859    #(  7.2871   4.9328  -0.6114) ; H1*
860    #(  7.1852   4.8935  -2.7592) ; C2*
861    #(  6.8573   3.9363  -3.1645) ; H2**
862    #(  8.5780   5.1025  -2.6046) ; O2*
863    #(  8.9516   4.7577  -1.7902) ; H2*
864    #(  6.5522   6.0300  -3.5612) ; C3*
865    #(  5.5420   5.7356  -3.8459) ; H3*
866    #(  7.3487   6.4089  -4.6867) ; O3*
867    #(  4.7442   0.4514  -0.1390) ; N1
868    #(  6.3687   2.1459  -0.5926) ; N3
869    #(  5.9795   0.9335  -0.2657) ; C2
870    #(  5.3052   2.9471  -0.8125) ; C4
871    #(  3.9891   2.5987  -0.7230) ; C5
872    #(  3.7016   1.2717  -0.3647) ; C6
873    #(  2.4553   0.7925  -0.2390) ; N6
874    #(  3.1770   3.6859  -1.0198) ; N7
875    #(  5.3247   4.2695  -1.1710) ; N9
876    #(  4.0156   4.6415  -1.2759) ; C8
877    #(  6.7198   0.1618  -0.0547) ; H2
878    #(  1.6709   1.3900  -0.4039) ; H61
879    #(  2.3107  -0.1627  -0.0373) ; H62
880    #(  3.4426   5.5361  -1.5199) ; H8
881  ))
882
883(define rA02
884  (make-constant-rA
885    #(  0.5566   0.0449   0.8296  ; dgf-base-tfo
886        0.5125   0.7673  -0.3854
887       -0.6538   0.6397   0.4041
888       -9.1161  -3.7679  -2.9968)
889    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
890       -0.0433  -0.4257   0.9038
891       -0.5788   0.7480   0.3246
892        1.5227   6.9114  -7.0765)
893    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
894        0.4552   0.6637   0.5935
895       -0.8042   0.0203   0.5941
896       -6.9472  -4.1186  -5.9108)
897    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
898       -0.8247   0.5587  -0.0878
899        0.0426   0.2162   0.9754
900        6.2694  -7.0540   3.3316)
901    #(  2.8930   8.5380  -3.3280) ; P
902    #(  1.6980   7.6960  -3.5570) ; O1P
903    #(  3.2260   9.5010  -4.4020) ; O2P
904    #(  4.1590   7.6040  -3.0340) ; O5*
905    #(  4.5778   6.6594  -4.0364) ; C5*
906    #(  4.9220   7.1963  -4.9204) ; H5*
907    #(  3.7996   5.9091  -4.1764) ; H5**
908    #(  5.7873   5.8869  -3.5482) ; C4*
909    #(  6.0405   5.0875  -4.2446) ; H4*
910    #(  6.9135   6.8036  -3.4310) ; O4*
911    #(  7.7293   6.4084  -2.3392) ; C1*
912    #(  8.7078   6.1815  -2.7624) ; H1*
913    #(  7.1305   5.1418  -1.7347) ; C2*
914    #(  7.2040   5.1982  -0.6486) ; H2**
915    #(  7.7417   4.0392  -2.3813) ; O2*
916    #(  8.6785   4.1443  -2.5630) ; H2*
917    #(  5.6666   5.2728  -2.1536) ; C3*
918    #(  5.1747   5.9805  -1.4863) ; H3*
919    #(  4.9997   4.0086  -2.1973) ; O3*
920    #( 10.3245   8.5459   1.5467) ; N1
921    #(  9.8051   6.9432  -0.1497) ; N3
922    #( 10.5175   7.4328   0.8408) ; C2
923    #(  8.7523   7.7422  -0.4228) ; C4
924    #(  8.4257   8.9060   0.2099) ; C5
925    #(  9.2665   9.3242   1.2540) ; C6
926    #(  9.0664  10.4462   1.9610) ; N6
927    #(  7.2750   9.4537  -0.3428) ; N7
928    #(  7.7962   7.5519  -1.3859) ; N9
929    #(  6.9479   8.6157  -1.2771) ; C8
930    #( 11.4063   6.9047   1.1859) ; H2
931    #(  8.2845  11.0341   1.7552) ; H61
932    #(  9.6584  10.6647   2.7198) ; H62
933    #(  6.0430   8.9853  -1.7594) ; H8
934  ))
935
936(define rA03
937  (make-constant-rA
938    #( -0.5021   0.0731   0.8617  ; dgf-base-tfo
939       -0.8112   0.3054  -0.4986
940       -0.2996  -0.9494  -0.0940
941        6.4273  -5.1944  -3.7807)
942    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
943       -0.0433  -0.4257   0.9038
944       -0.5788   0.7480   0.3246
945        1.5227   6.9114  -7.0765)
946    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
947        0.4552   0.6637   0.5935
948       -0.8042   0.0203   0.5941
949       -6.9472  -4.1186  -5.9108)
950    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
951       -0.8247   0.5587  -0.0878
952        0.0426   0.2162   0.9754
953        6.2694  -7.0540   3.3316)
954    #(  2.8930   8.5380  -3.3280) ; P
955    #(  1.6980   7.6960  -3.5570) ; O1P
956    #(  3.2260   9.5010  -4.4020) ; O2P
957    #(  4.1590   7.6040  -3.0340) ; O5*
958    #(  4.1214   6.7116  -1.9049) ; C5*
959    #(  3.3465   5.9610  -2.0607) ; H5*
960    #(  4.0789   7.2928  -0.9837) ; H5**
961    #(  5.4170   5.9293  -1.8186) ; C4*
962    #(  5.4506   5.3400  -0.9023) ; H4*
963    #(  5.5067   5.0417  -2.9703) ; O4*
964    #(  6.8650   4.9152  -3.3612) ; C1*
965    #(  7.1090   3.8577  -3.2603) ; H1*
966    #(  7.7152   5.7282  -2.3894) ; C2*
967    #(  8.5029   6.2356  -2.9463) ; H2**
968    #(  8.1036   4.8568  -1.3419) ; O2*
969    #(  8.3270   3.9651  -1.6184) ; H2*
970    #(  6.7003   6.7565  -1.8911) ; C3*
971    #(  6.5898   7.5329  -2.6482) ; H3*
972    #(  7.0505   7.2878  -0.6105) ; O3*
973    #(  9.6740   4.7656  -7.6614) ; N1
974    #(  9.0739   4.3013  -5.3941) ; N3
975    #(  9.8416   4.2192  -6.4581) ; C2
976    #(  7.9885   5.0632  -5.6446) ; C4
977    #(  7.6822   5.6856  -6.8194) ; C5
978    #(  8.5831   5.5215  -7.8840) ; C6
979    #(  8.4084   6.0747  -9.0933) ; N6
980    #(  6.4857   6.3816  -6.7035) ; N7
981    #(  6.9740   5.3703  -4.7760) ; N9
982    #(  6.1133   6.1613  -5.4808) ; C8
983    #( 10.7627   3.6375  -6.4220) ; H2
984    #(  7.6031   6.6390  -9.2733) ; H61
985    #(  9.1004   5.9708  -9.7893) ; H62
986    #(  5.1705   6.6830  -5.3167) ; H8
987  ))
988
989(define rA04
990  (make-constant-rA
991    #( -0.5426  -0.8175   0.1929  ; dgf-base-tfo
992        0.8304  -0.5567  -0.0237
993        0.1267   0.1473   0.9809
994       -0.5075   8.3929   0.2229)
995    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
996       -0.0433  -0.4257   0.9038
997       -0.5788   0.7480   0.3246
998        1.5227   6.9114  -7.0765)
999    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
1000        0.4552   0.6637   0.5935
1001       -0.8042   0.0203   0.5941
1002       -6.9472  -4.1186  -5.9108)
1003    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
1004       -0.8247   0.5587  -0.0878
1005        0.0426   0.2162   0.9754
1006        6.2694  -7.0540   3.3316)
1007    #(  2.8930   8.5380  -3.3280) ; P
1008    #(  1.6980   7.6960  -3.5570) ; O1P
1009    #(  3.2260   9.5010  -4.4020) ; O2P
1010    #(  4.1590   7.6040  -3.0340) ; O5*
1011    #(  5.4352   8.2183  -2.7757) ; C5*
1012    #(  5.3830   8.7883  -1.8481) ; H5*
1013    #(  5.7729   8.7436  -3.6691) ; H5**
1014    #(  6.4830   7.1518  -2.5252) ; C4*
1015    #(  7.4749   7.5972  -2.4482) ; H4*
1016    #(  6.1626   6.4620  -1.2827) ; O4*
1017    #(  6.5431   5.0992  -1.3905) ; C1*
1018    #(  7.2871   4.9328  -0.6114) ; H1*
1019    #(  7.1852   4.8935  -2.7592) ; C2*
1020    #(  6.8573   3.9363  -3.1645) ; H2**
1021    #(  8.5780   5.1025  -2.6046) ; O2*
1022    #(  8.9516   4.7577  -1.7902) ; H2*
1023    #(  6.5522   6.0300  -3.5612) ; C3*
1024    #(  5.5420   5.7356  -3.8459) ; H3*
1025    #(  7.3487   6.4089  -4.6867) ; O3*
1026    #(  3.6343   2.6680   2.0783) ; N1
1027    #(  5.4505   3.9805   1.2446) ; N3
1028    #(  4.7540   3.3816   2.1851) ; C2
1029    #(  4.8805   3.7951   0.0354) ; C4
1030    #(  3.7416   3.0925  -0.2305) ; C5
1031    #(  3.0873   2.4980   0.8606) ; C6
1032    #(  1.9600   1.7805   0.7462) ; N6
1033    #(  3.4605   3.1184  -1.5906) ; N7
1034    #(  5.3247   4.2695  -1.1710) ; N9
1035    #(  4.4244   3.8244  -2.0953) ; C8
1036    #(  5.0814   3.4352   3.2234) ; H2
1037    #(  1.5423   1.6454  -0.1520) ; H61
1038    #(  1.5716   1.3398   1.5392) ; H62
1039    #(  4.2675   3.8876  -3.1721) ; H8
1040  ))
1041
1042(define rA05
1043  (make-constant-rA
1044    #( -0.5891   0.0449   0.8068  ; dgf-base-tfo
1045        0.5375   0.7673   0.3498
1046       -0.6034   0.6397  -0.4762
1047       -0.3019  -3.7679  -9.5913)
1048    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
1049       -0.0433  -0.4257   0.9038
1050       -0.5788   0.7480   0.3246
1051        1.5227   6.9114  -7.0765)
1052    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
1053        0.4552   0.6637   0.5935
1054       -0.8042   0.0203   0.5941
1055       -6.9472  -4.1186  -5.9108)
1056    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
1057       -0.8247   0.5587  -0.0878
1058        0.0426   0.2162   0.9754
1059        6.2694  -7.0540   3.3316)
1060    #(  2.8930   8.5380  -3.3280) ; P
1061    #(  1.6980   7.6960  -3.5570) ; O1P
1062    #(  3.2260   9.5010  -4.4020) ; O2P
1063    #(  4.1590   7.6040  -3.0340) ; O5*
1064    #(  4.5778   6.6594  -4.0364) ; C5*
1065    #(  4.9220   7.1963  -4.9204) ; H5*
1066    #(  3.7996   5.9091  -4.1764) ; H5**
1067    #(  5.7873   5.8869  -3.5482) ; C4*
1068    #(  6.0405   5.0875  -4.2446) ; H4*
1069    #(  6.9135   6.8036  -3.4310) ; O4*
1070    #(  7.7293   6.4084  -2.3392) ; C1*
1071    #(  8.7078   6.1815  -2.7624) ; H1*
1072    #(  7.1305   5.1418  -1.7347) ; C2*
1073    #(  7.2040   5.1982  -0.6486) ; H2**
1074    #(  7.7417   4.0392  -2.3813) ; O2*
1075    #(  8.6785   4.1443  -2.5630) ; H2*
1076    #(  5.6666   5.2728  -2.1536) ; C3*
1077    #(  5.1747   5.9805  -1.4863) ; H3*
1078    #(  4.9997   4.0086  -2.1973) ; O3*
1079    #( 10.2594  10.6774  -1.0056) ; N1
1080    #(  9.7528   8.7080  -2.2631) ; N3
1081    #( 10.4471   9.7876  -1.9791) ; C2
1082    #(  8.7271   8.5575  -1.3991) ; C4
1083    #(  8.4100   9.3803  -0.3580) ; C5
1084    #(  9.2294  10.5030  -0.1574) ; C6
1085    #(  9.0349  11.3951   0.8250) ; N6
1086    #(  7.2891   8.9068   0.3121) ; N7
1087    #(  7.7962   7.5519  -1.3859) ; N9
1088    #(  6.9702   7.8292  -0.3353) ; C8
1089    #( 11.3132  10.0537  -2.5851) ; H2
1090    #(  8.2741  11.2784   1.4629) ; H61
1091    #(  9.6733  12.1368   0.9529) ; H62
1092    #(  6.0888   7.3990   0.1403) ; H8
1093  ))
1094
1095(define rA06
1096  (make-constant-rA
1097    #( -0.9815   0.0731  -0.1772  ; dgf-base-tfo
1098        0.1912   0.3054  -0.9328
1099       -0.0141  -0.9494  -0.3137
1100        5.7506  -5.1944   4.7470)
1101    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
1102       -0.0433  -0.4257   0.9038
1103       -0.5788   0.7480   0.3246
1104        1.5227   6.9114  -7.0765)
1105    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
1106        0.4552   0.6637   0.5935
1107       -0.8042   0.0203   0.5941
1108       -6.9472  -4.1186  -5.9108)
1109    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
1110       -0.8247   0.5587  -0.0878
1111        0.0426   0.2162   0.9754
1112        6.2694  -7.0540   3.3316)
1113    #(  2.8930   8.5380  -3.3280) ; P
1114    #(  1.6980   7.6960  -3.5570) ; O1P
1115    #(  3.2260   9.5010  -4.4020) ; O2P
1116    #(  4.1590   7.6040  -3.0340) ; O5*
1117    #(  4.1214   6.7116  -1.9049) ; C5*
1118    #(  3.3465   5.9610  -2.0607) ; H5*
1119    #(  4.0789   7.2928  -0.9837) ; H5**
1120    #(  5.4170   5.9293  -1.8186) ; C4*
1121    #(  5.4506   5.3400  -0.9023) ; H4*
1122    #(  5.5067   5.0417  -2.9703) ; O4*
1123    #(  6.8650   4.9152  -3.3612) ; C1*
1124    #(  7.1090   3.8577  -3.2603) ; H1*
1125    #(  7.7152   5.7282  -2.3894) ; C2*
1126    #(  8.5029   6.2356  -2.9463) ; H2**
1127    #(  8.1036   4.8568  -1.3419) ; O2*
1128    #(  8.3270   3.9651  -1.6184) ; H2*
1129    #(  6.7003   6.7565  -1.8911) ; C3*
1130    #(  6.5898   7.5329  -2.6482) ; H3*
1131    #(  7.0505   7.2878  -0.6105) ; O3*
1132    #(  6.6624   3.5061  -8.2986) ; N1
1133    #(  6.5810   3.2570  -5.9221) ; N3
1134    #(  6.5151   2.8263  -7.1625) ; C2
1135    #(  6.8364   4.5817  -5.8882) ; C4
1136    #(  7.0116   5.4064  -6.9609) ; C5
1137    #(  6.9173   4.8260  -8.2361) ; C6
1138    #(  7.0668   5.5163  -9.3763) ; N6
1139    #(  7.2573   6.7070  -6.5394) ; N7
1140    #(  6.9740   5.3703  -4.7760) ; N9
1141    #(  7.2238   6.6275  -5.2453) ; C8
1142    #(  6.3146   1.7741  -7.3641) ; H2
1143    #(  7.2568   6.4972  -9.3456) ; H61
1144    #(  7.0437   5.0478 -10.2446) ; H62
1145    #(  7.4108   7.6227  -4.8418) ; H8
1146  ))
1147
1148(define rA07
1149  (make-constant-rA
1150    #(  0.2379   0.1310  -0.9624  ; dgf-base-tfo
1151       -0.5876  -0.7696  -0.2499
1152       -0.7734   0.6249  -0.1061
1153       30.9870 -26.9344  42.6416)
1154    #(  0.7529   0.1548   0.6397  ; P-O3*-275-tfo
1155        0.2952  -0.9481  -0.1180
1156        0.5882   0.2777  -0.7595
1157      -58.8919 -11.3095   6.0866)
1158    #( -0.0239   0.9667  -0.2546  ; P-O3*-180-tfo
1159        0.9731  -0.0359  -0.2275
1160       -0.2290  -0.2532  -0.9399
1161        3.5401 -29.7913  52.2796)
1162    #( -0.8912  -0.4531   0.0242  ; P-O3*-60-tfo
1163       -0.1183   0.1805  -0.9764
1164        0.4380  -0.8730  -0.2145
1165       19.9023  54.8054  15.2799)
1166    #( 41.8210   8.3880  43.5890) ; P
1167    #( 42.5400   8.0450  44.8330) ; O1P
1168    #( 42.2470   9.6920  42.9910) ; O2P
1169    #( 40.2550   8.2030  43.7340) ; O5*
1170    #( 39.3505   8.4697  42.6565) ; C5*
1171    #( 39.1377   7.5433  42.1230) ; H5*
1172    #( 39.7203   9.3119  42.0717) ; H5**
1173    #( 38.0405   8.9195  43.2869) ; C4*
1174    #( 37.3687   9.3036  42.5193) ; H4*
1175    #( 37.4319   7.8146  43.9387) ; O4*
1176    #( 37.1959   8.1354  45.3237) ; C1*
1177    #( 36.1788   8.5202  45.3970) ; H1*
1178    #( 38.1721   9.2328  45.6504) ; C2*
1179    #( 39.1555   8.7939  45.8188) ; H2**
1180    #( 37.7862  10.0617  46.7013) ; O2*
1181    #( 37.3087   9.6229  47.4092) ; H2*
1182    #( 38.1844  10.0268  44.3367) ; C3*
1183    #( 39.1578  10.5054  44.2289) ; H3*
1184    #( 37.0547  10.9127  44.3441) ; O3*
1185    #( 34.8811   4.2072  47.5784) ; N1
1186    #( 35.1084   6.1336  46.1818) ; N3
1187    #( 34.4108   5.1360  46.7207) ; C2
1188    #( 36.3908   6.1224  46.6053) ; C4
1189    #( 36.9819   5.2334  47.4697) ; C5
1190    #( 36.1786   4.1985  48.0035) ; C6
1191    #( 36.6103   3.2749  48.8452) ; N6
1192    #( 38.3236   5.5522  47.6595) ; N7
1193    #( 37.3887   7.0024  46.2437) ; N9
1194    #( 38.5055   6.6096  46.9057) ; C8
1195    #( 33.3553   5.0152  46.4771) ; H2
1196    #( 37.5730   3.2804  49.1507) ; H61
1197    #( 35.9775   2.5638  49.1828) ; H62
1198    #( 39.5461   6.9184  47.0041) ; H8
1199  ))
1200
1201(define rA08
1202  (make-constant-rA
1203    #(  0.1084  -0.0895  -0.9901  ; dgf-base-tfo
1204        0.9789  -0.1638   0.1220
1205       -0.1731  -0.9824   0.0698
1206       -2.9039  47.2655  33.0094)
1207    #(  0.7529   0.1548   0.6397  ; P-O3*-275-tfo
1208        0.2952  -0.9481  -0.1180
1209        0.5882   0.2777  -0.7595
1210      -58.8919 -11.3095   6.0866)
1211    #( -0.0239   0.9667  -0.2546  ; P-O3*-180-tfo
1212        0.9731  -0.0359  -0.2275
1213       -0.2290  -0.2532  -0.9399
1214        3.5401 -29.7913  52.2796)
1215    #( -0.8912  -0.4531   0.0242  ; P-O3*-60-tfo
1216       -0.1183   0.1805  -0.9764
1217        0.4380  -0.8730  -0.2145
1218       19.9023  54.8054  15.2799)
1219    #( 41.8210   8.3880  43.5890) ; P
1220    #( 42.5400   8.0450  44.8330) ; O1P
1221    #( 42.2470   9.6920  42.9910) ; O2P
1222    #( 40.2550   8.2030  43.7340) ; O5*
1223    #( 39.4850   8.9301  44.6977) ; C5*
1224    #( 39.0638   9.8199  44.2296) ; H5*
1225    #( 40.0757   9.0713  45.6029) ; H5**
1226    #( 38.3102   8.0414  45.0789) ; C4*
1227    #( 37.7842   8.4637  45.9351) ; H4*
1228    #( 37.4200   7.9453  43.9769) ; O4*
1229    #( 37.2249   6.5609  43.6273) ; C1*
1230    #( 36.3360   6.2168  44.1561) ; H1*
1231    #( 38.4347   5.8414  44.1590) ; C2*
1232    #( 39.2688   5.9974  43.4749) ; H2**
1233    #( 38.2344   4.4907  44.4348) ; O2*
1234    #( 37.6374   4.0386  43.8341) ; H2*
1235    #( 38.6926   6.6079  45.4637) ; C3*
1236    #( 39.7585   6.5640  45.6877) ; H3*
1237    #( 37.8238   6.0705  46.4723) ; O3*
1238    #( 33.9162   6.2598  39.7758) ; N1
1239    #( 34.6709   6.5759  42.0215) ; N3
1240    #( 33.7257   6.5186  41.0858) ; C2
1241    #( 35.8935   6.3324  41.5018) ; C4
1242    #( 36.2105   6.0601  40.1932) ; C5
1243    #( 35.1538   6.0151  39.2537) ; C6
1244    #( 35.3088   5.7642  37.9649) ; N6
1245    #( 37.5818   5.8677  40.0507) ; N7
1246    #( 37.0932   6.3197  42.1810) ; N9
1247    #( 38.0509   6.0354  41.2635) ; C8
1248    #( 32.6830   6.6898  41.3532) ; H2
1249    #( 36.2305   5.5855  37.5925) ; H61
1250    #( 34.5056   5.7512  37.3528) ; H62
1251    #( 39.1318   5.8993  41.2285) ; H8
1252  ))
1253
1254(define rA09
1255  (make-constant-rA
1256    #(  0.8467   0.4166  -0.3311  ; dgf-base-tfo
1257       -0.3962   0.9089   0.1303
1258        0.3552   0.0209   0.9346
1259      -42.7319 -26.6223 -29.8163)
1260    #(  0.7529   0.1548   0.6397  ; P-O3*-275-tfo
1261        0.2952  -0.9481  -0.1180
1262        0.5882   0.2777  -0.7595
1263      -58.8919 -11.3095   6.0866)
1264    #( -0.0239   0.9667  -0.2546  ; P-O3*-180-tfo
1265        0.9731  -0.0359  -0.2275
1266       -0.2290  -0.2532  -0.9399
1267        3.5401 -29.7913  52.2796)
1268    #( -0.8912  -0.4531   0.0242  ; P-O3*-60-tfo
1269       -0.1183   0.1805  -0.9764
1270        0.4380  -0.8730  -0.2145
1271       19.9023  54.8054  15.2799)
1272    #( 41.8210   8.3880  43.5890) ; P
1273    #( 42.5400   8.0450  44.8330) ; O1P
1274    #( 42.2470   9.6920  42.9910) ; O2P
1275    #( 40.2550   8.2030  43.7340) ; O5*
1276    #( 39.3505   8.4697  42.6565) ; C5*
1277    #( 39.1377   7.5433  42.1230) ; H5*
1278    #( 39.7203   9.3119  42.0717) ; H5**
1279    #( 38.0405   8.9195  43.2869) ; C4*
1280    #( 37.6479   8.1347  43.9335) ; H4*
1281    #( 38.2691  10.0933  44.0524) ; O4*
1282    #( 37.3999  11.1488  43.5973) ; C1*
1283    #( 36.5061  11.1221  44.2206) ; H1*
1284    #( 37.0364  10.7838  42.1836) ; C2*
1285    #( 37.8636  11.0489  41.5252) ; H2**
1286    #( 35.8275  11.3133  41.7379) ; O2*
1287    #( 35.6214  12.1896  42.0714) ; H2*
1288    #( 36.9316   9.2556  42.2837) ; C3*
1289    #( 37.1778   8.8260  41.3127) ; H3*
1290    #( 35.6285   8.9334  42.7926) ; O3*
1291    #( 38.1482  15.2833  46.4641) ; N1
1292    #( 37.3641  13.0968  45.9007) ; N3
1293    #( 37.5032  14.1288  46.7300) ; C2
1294    #( 37.9570  13.3377  44.7113) ; C4
1295    #( 38.6397  14.4660  44.3267) ; C5
1296    #( 38.7473  15.5229  45.2609) ; C6
1297    #( 39.3720  16.6649  45.0297) ; N6
1298    #( 39.1079  14.3351  43.0223) ; N7
1299    #( 38.0132  12.4868  43.6280) ; N9
1300    #( 38.7058  13.1402  42.6620) ; C8
1301    #( 37.0731  14.0857  47.7306) ; H2
1302    #( 39.8113  16.8281  44.1350) ; H61
1303    #( 39.4100  17.3741  45.7478) ; H62
1304    #( 39.0412  12.9660  41.6397) ; H8
1305  ))
1306
1307(define rA10
1308  (make-constant-rA
1309    #(  0.7063   0.6317  -0.3196  ; dgf-base-tfo
1310       -0.0403  -0.4149  -0.9090
1311       -0.7068   0.6549  -0.2676
1312        6.4402 -52.1496  30.8246)
1313    #(  0.7529   0.1548   0.6397  ; P-O3*-275-tfo
1314        0.2952  -0.9481  -0.1180
1315        0.5882   0.2777  -0.7595
1316      -58.8919 -11.3095   6.0866)
1317    #( -0.0239   0.9667  -0.2546  ; P-O3*-180-tfo
1318        0.9731  -0.0359  -0.2275
1319       -0.2290  -0.2532  -0.9399
1320        3.5401 -29.7913  52.2796)
1321    #( -0.8912  -0.4531   0.0242  ; P-O3*-60-tfo
1322       -0.1183   0.1805  -0.9764
1323        0.4380  -0.8730  -0.2145
1324       19.9023  54.8054  15.2799)
1325    #( 41.8210   8.3880  43.5890) ; P
1326    #( 42.5400   8.0450  44.8330) ; O1P
1327    #( 42.2470   9.6920  42.9910) ; O2P
1328    #( 40.2550   8.2030  43.7340) ; O5*
1329    #( 39.4850   8.9301  44.6977) ; C5*
1330    #( 39.0638   9.8199  44.2296) ; H5*
1331    #( 40.0757   9.0713  45.6029) ; H5**
1332    #( 38.3102   8.0414  45.0789) ; C4*
1333    #( 37.7099   7.8166  44.1973) ; H4*
1334    #( 38.8012   6.8321  45.6380) ; O4*
1335    #( 38.2431   6.6413  46.9529) ; C1*
1336    #( 37.3505   6.0262  46.8385) ; H1*
1337    #( 37.8484   8.0156  47.4214) ; C2*
1338    #( 38.7381   8.5406  47.7690) ; H2**
1339    #( 36.8286   8.0368  48.3701) ; O2*
1340    #( 36.8392   7.3063  48.9929) ; H2*
1341    #( 37.3576   8.6512  46.1132) ; C3*
1342    #( 37.5207   9.7275  46.1671) ; H3*
1343    #( 35.9985   8.2392  45.9032) ; O3*
1344    #( 39.9117   2.2278  48.8527) ; N1
1345    #( 38.6207   3.6941  47.4757) ; N3
1346    #( 38.9872   2.4888  47.9057) ; C2
1347    #( 39.2961   4.6720  48.1174) ; C4
1348    #( 40.2546   4.5307  49.0912) ; C5
1349    #( 40.5932   3.2189  49.4985) ; C6
1350    #( 41.4938   2.9317  50.4229) ; N6
1351    #( 40.7195   5.7755  49.5060) ; N7
1352    #( 39.1730   6.0305  47.9170) ; N9
1353    #( 40.0413   6.6250  48.7728) ; C8
1354    #( 38.5257   1.5960  47.4838) ; H2
1355    #( 41.9907   3.6753  50.8921) ; H61
1356    #( 41.6848   1.9687  50.6599) ; H62
1357    #( 40.3571   7.6321  49.0452) ; H8
1358  ))
1359
1360(define rAs
1361  (list rA01 rA02 rA03 rA04 rA05 rA06 rA07 rA08 rA09 rA10))
1362
1363(define rC
1364  (make-constant-rC
1365    #( -0.0359  -0.8071   0.5894  ; dgf-base-tfo
1366       -0.2669   0.5761   0.7726
1367       -0.9631  -0.1296  -0.2361
1368        0.1584   8.3434   0.5434)
1369    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
1370        0.0649   0.4366  -0.8973
1371        0.5521  -0.7648  -0.3322
1372        1.6833   6.8060  -7.0011)
1373    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
1374       -0.4628  -0.6450  -0.6082
1375        0.8168  -0.0436  -0.5753
1376       -6.8179  -3.9778  -5.9887)
1377    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
1378        0.8103  -0.5790   0.0906
1379       -0.0255  -0.1894  -0.9816
1380        6.1203  -7.1051   3.1984)
1381    #(  2.6760  -8.4960   3.2880) ; P
1382    #(  1.4950  -7.6230   3.4770) ; O1P
1383    #(  2.9490  -9.4640   4.3740) ; O2P
1384    #(  3.9730  -7.5950   3.0340) ; O5*
1385    #(  5.2430  -8.2420   2.8260) ; C5*
1386    #(  5.1974  -8.8497   1.9223) ; H5*
1387    #(  5.5548  -8.7348   3.7469) ; H5**
1388    #(  6.3140  -7.2060   2.5510) ; C4*
1389    #(  7.2954  -7.6762   2.4898) ; H4*
1390    #(  6.0140  -6.5420   1.2890) ; O4*
1391    #(  6.4190  -5.1840   1.3620) ; C1*
1392    #(  7.1608  -5.0495   0.5747) ; H1*
1393    #(  7.0760  -4.9560   2.7270) ; C2*
1394    #(  6.7770  -3.9803   3.1099) ; H2**
1395    #(  8.4500  -5.1930   2.5810) ; O2*
1396    #(  8.8309  -4.8755   1.7590) ; H2*
1397    #(  6.4060  -6.0590   3.5580) ; C3*
1398    #(  5.4021  -5.7313   3.8281) ; H3*
1399    #(  7.1570  -6.4240   4.7070) ; O3*
1400    #(  5.2170  -4.3260   1.1690) ; N1
1401    #(  4.2960  -2.2560   0.6290) ; N3
1402    #(  5.4330  -3.0200   0.7990) ; C2
1403    #(  2.9930  -2.6780   0.7940) ; C4
1404    #(  2.8670  -4.0630   1.1830) ; C5
1405    #(  3.9570  -4.8300   1.3550) ; C6
1406    #(  2.0187  -1.8047   0.5874) ; N4
1407    #(  6.5470  -2.5560   0.6290) ; O2
1408    #(  1.0684  -2.1236   0.7109) ; H41
1409    #(  2.2344  -0.8560   0.3162) ; H42
1410    #(  1.8797  -4.4972   1.3404) ; H5
1411    #(  3.8479  -5.8742   1.6480) ; H6
1412  ))
1413
1414(define rC01
1415  (make-constant-rC
1416    #( -0.0137  -0.8012   0.5983  ; dgf-base-tfo
1417       -0.2523   0.5817   0.7733
1418       -0.9675  -0.1404  -0.2101
1419        0.2031   8.3874   0.4228)
1420    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
1421        0.0649   0.4366  -0.8973
1422        0.5521  -0.7648  -0.3322
1423        1.6833   6.8060  -7.0011)
1424    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
1425       -0.4628  -0.6450  -0.6082
1426        0.8168  -0.0436  -0.5753
1427       -6.8179  -3.9778  -5.9887)
1428    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
1429        0.8103  -0.5790   0.0906
1430       -0.0255  -0.1894  -0.9816
1431        6.1203  -7.1051   3.1984)
1432    #(  2.6760  -8.4960   3.2880) ; P
1433    #(  1.4950  -7.6230   3.4770) ; O1P
1434    #(  2.9490  -9.4640   4.3740) ; O2P
1435    #(  3.9730  -7.5950   3.0340) ; O5*
1436    #(  5.2416  -8.2422   2.8181) ; C5*
1437    #(  5.2050  -8.8128   1.8901) ; H5*
1438    #(  5.5368  -8.7738   3.7227) ; H5**
1439    #(  6.3232  -7.2037   2.6002) ; C4*
1440    #(  7.3048  -7.6757   2.5577) ; H4*
1441    #(  6.0635  -6.5092   1.3456) ; O4*
1442    #(  6.4697  -5.1547   1.4629) ; C1*
1443    #(  7.2354  -5.0043   0.7018) ; H1*
1444    #(  7.0856  -4.9610   2.8521) ; C2*
1445    #(  6.7777  -3.9935   3.2487) ; H2**
1446    #(  8.4627  -5.1992   2.7423) ; O2*
1447    #(  8.8693  -4.8638   1.9399) ; H2*
1448    #(  6.3877  -6.0809   3.6362) ; C3*
1449    #(  5.3770  -5.7562   3.8834) ; H3*
1450    #(  7.1024  -6.4754   4.7985) ; O3*
1451    #(  5.2764  -4.2883   1.2538) ; N1
1452    #(  4.3777  -2.2062   0.7229) ; N3
1453    #(  5.5069  -2.9779   0.9088) ; C2
1454    #(  3.0693  -2.6246   0.8500) ; C4
1455    #(  2.9279  -4.0146   1.2149) ; C5
1456    #(  4.0101  -4.7892   1.4017) ; C6
1457    #(  2.1040  -1.7437   0.6331) ; N4
1458    #(  6.6267  -2.5166   0.7728) ; O2
1459    #(  1.1496  -2.0600   0.7287) ; H41
1460    #(  2.3303  -0.7921   0.3815) ; H42
1461    #(  1.9353  -4.4465   1.3419) ; H5
1462    #(  3.8895  -5.8371   1.6762) ; H6
1463  ))
1464
1465(define rC02
1466  (make-constant-rC
1467    #(  0.5141   0.0246   0.8574  ; dgf-base-tfo
1468       -0.5547  -0.7529   0.3542
1469        0.6542  -0.6577  -0.3734
1470       -9.1111  -3.4598  -3.2939)
1471    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
1472        0.0649   0.4366  -0.8973
1473        0.5521  -0.7648  -0.3322
1474        1.6833   6.8060  -7.0011)
1475    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
1476       -0.4628  -0.6450  -0.6082
1477        0.8168  -0.0436  -0.5753
1478       -6.8179  -3.9778  -5.9887)
1479    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
1480        0.8103  -0.5790   0.0906
1481       -0.0255  -0.1894  -0.9816
1482        6.1203  -7.1051   3.1984)
1483    #(  2.6760  -8.4960   3.2880) ; P
1484    #(  1.4950  -7.6230   3.4770) ; O1P
1485    #(  2.9490  -9.4640   4.3740) ; O2P
1486    #(  3.9730  -7.5950   3.0340) ; O5*
1487    #(  4.3825  -6.6585   4.0489) ; C5*
1488    #(  4.6841  -7.2019   4.9443) ; H5*
1489    #(  3.6189  -5.8889   4.1625) ; H5**
1490    #(  5.6255  -5.9175   3.5998) ; C4*
1491    #(  5.8732  -5.1228   4.3034) ; H4*
1492    #(  6.7337  -6.8605   3.5222) ; O4*
1493    #(  7.5932  -6.4923   2.4548) ; C1*
1494    #(  8.5661  -6.2983   2.9064) ; H1*
1495    #(  7.0527  -5.2012   1.8322) ; C2*
1496    #(  7.1627  -5.2525   0.7490) ; H2**
1497    #(  7.6666  -4.1249   2.4880) ; O2*
1498    #(  8.5944  -4.2543   2.6981) ; H2*
1499    #(  5.5661  -5.3029   2.2009) ; C3*
1500    #(  5.0841  -6.0018   1.5172) ; H3*
1501    #(  4.9062  -4.0452   2.2042) ; O3*
1502    #(  7.6298  -7.6136   1.4752) ; N1
1503    #(  8.6945  -8.7046  -0.2857) ; N3
1504    #(  8.6943  -7.6514   0.6066) ; C2
1505    #(  7.7426  -9.6987  -0.3801) ; C4
1506    #(  6.6642  -9.5742   0.5722) ; C5
1507    #(  6.6391  -8.5592   1.4526) ; C6
1508    #(  7.9033 -10.6371  -1.3010) ; N4
1509    #(  9.5840  -6.8186   0.6136) ; O2
1510    #(  7.2009 -11.3604  -1.3619) ; H41
1511    #(  8.7058 -10.6168  -1.9140) ; H42
1512    #(  5.8585 -10.3083   0.5822) ; H5
1513    #(  5.8197  -8.4773   2.1667) ; H6
1514  ))
1515
1516(define rC03
1517  (make-constant-rC
1518    #( -0.4993   0.0476   0.8651  ; dgf-base-tfo
1519        0.8078  -0.3353   0.4847
1520        0.3132   0.9409   0.1290
1521        6.2989  -5.2303  -3.8577)
1522    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
1523        0.0649   0.4366  -0.8973
1524        0.5521  -0.7648  -0.3322
1525        1.6833   6.8060  -7.0011)
1526    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
1527       -0.4628  -0.6450  -0.6082
1528        0.8168  -0.0436  -0.5753
1529       -6.8179  -3.9778  -5.9887)
1530    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
1531        0.8103  -0.5790   0.0906
1532       -0.0255  -0.1894  -0.9816
1533        6.1203  -7.1051   3.1984)
1534    #(  2.6760  -8.4960   3.2880) ; P
1535    #(  1.4950  -7.6230   3.4770) ; O1P
1536    #(  2.9490  -9.4640   4.3740) ; O2P
1537    #(  3.9730  -7.5950   3.0340) ; O5*
1538    #(  3.9938  -6.7042   1.9023) ; C5*
1539    #(  3.2332  -5.9343   2.0319) ; H5*
1540    #(  3.9666  -7.2863   0.9812) ; H5**
1541    #(  5.3098  -5.9546   1.8564) ; C4*
1542    #(  5.3863  -5.3702   0.9395) ; H4*
1543    #(  5.3851  -5.0642   3.0076) ; O4*
1544    #(  6.7315  -4.9724   3.4462) ; C1*
1545    #(  7.0033  -3.9202   3.3619) ; H1*
1546    #(  7.5997  -5.8018   2.4948) ; C2*
1547    #(  8.3627  -6.3254   3.0707) ; H2**
1548    #(  8.0410  -4.9501   1.4724) ; O2*
1549    #(  8.2781  -4.0644   1.7570) ; H2*
1550    #(  6.5701  -6.8129   1.9714) ; C3*
1551    #(  6.4186  -7.5809   2.7299) ; H3*
1552    #(  6.9357  -7.3841   0.7235) ; O3*
1553    #(  6.8024  -5.4718   4.8475) ; N1
1554    #(  7.9218  -5.5700   6.8877) ; N3
1555    #(  7.8908  -5.0886   5.5944) ; C2
1556    #(  6.9789  -6.3827   7.4823) ; C4
1557    #(  5.8742  -6.7319   6.6202) ; C5
1558    #(  5.8182  -6.2769   5.3570) ; C6
1559    #(  7.1702  -6.7511   8.7402) ; N4
1560    #(  8.7747  -4.3728   5.1568) ; O2
1561    #(  6.4741  -7.3461   9.1662) ; H41
1562    #(  7.9889  -6.4396   9.2429) ; H42
1563    #(  5.0736  -7.3713   6.9922) ; H5
1564    #(  4.9784  -6.5473   4.7170) ; H6
1565  ))
1566
1567(define rC04
1568  (make-constant-rC
1569    #( -0.5669  -0.8012   0.1918  ; dgf-base-tfo
1570       -0.8129   0.5817   0.0273
1571       -0.1334  -0.1404  -0.9811
1572       -0.3279   8.3874   0.3355)
1573    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
1574        0.0649   0.4366  -0.8973
1575        0.5521  -0.7648  -0.3322
1576        1.6833   6.8060  -7.0011)
1577    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
1578       -0.4628  -0.6450  -0.6082
1579        0.8168  -0.0436  -0.5753
1580       -6.8179  -3.9778  -5.9887)
1581    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
1582        0.8103  -0.5790   0.0906
1583       -0.0255  -0.1894  -0.9816
1584        6.1203  -7.1051   3.1984)
1585    #(  2.6760  -8.4960   3.2880) ; P
1586    #(  1.4950  -7.6230   3.4770) ; O1P
1587    #(  2.9490  -9.4640   4.3740) ; O2P
1588    #(  3.9730  -7.5950   3.0340) ; O5*
1589    #(  5.2416  -8.2422   2.8181) ; C5*
1590    #(  5.2050  -8.8128   1.8901) ; H5*
1591    #(  5.5368  -8.7738   3.7227) ; H5**
1592    #(  6.3232  -7.2037   2.6002) ; C4*
1593    #(  7.3048  -7.6757   2.5577) ; H4*
1594    #(  6.0635  -6.5092   1.3456) ; O4*
1595    #(  6.4697  -5.1547   1.4629) ; C1*
1596    #(  7.2354  -5.0043   0.7018) ; H1*
1597    #(  7.0856  -4.9610   2.8521) ; C2*
1598    #(  6.7777  -3.9935   3.2487) ; H2**
1599    #(  8.4627  -5.1992   2.7423) ; O2*
1600    #(  8.8693  -4.8638   1.9399) ; H2*
1601    #(  6.3877  -6.0809   3.6362) ; C3*
1602    #(  5.3770  -5.7562   3.8834) ; H3*
1603    #(  7.1024  -6.4754   4.7985) ; O3*
1604    #(  5.2764  -4.2883   1.2538) ; N1
1605    #(  3.8961  -3.0896  -0.1893) ; N3
1606    #(  5.0095  -3.8907  -0.0346) ; C2
1607    #(  3.0480  -2.6632   0.8116) ; C4
1608    #(  3.4093  -3.1310   2.1292) ; C5
1609    #(  4.4878  -3.9124   2.3088) ; C6
1610    #(  2.0216  -1.8941   0.4804) ; N4
1611    #(  5.7005  -4.2164  -0.9842) ; O2
1612    #(  1.4067  -1.5873   1.2205) ; H41
1613    #(  1.8721  -1.6319  -0.4835) ; H42
1614    #(  2.8048  -2.8507   2.9918) ; H5
1615    #(  4.7491  -4.2593   3.3085) ; H6
1616  ))
1617
1618(define rC05
1619  (make-constant-rC
1620    #( -0.6298   0.0246   0.7763  ; dgf-base-tfo
1621       -0.5226  -0.7529  -0.4001
1622        0.5746  -0.6577   0.4870
1623       -0.0208  -3.4598  -9.6882)
1624    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
1625        0.0649   0.4366  -0.8973
1626        0.5521  -0.7648  -0.3322
1627        1.6833   6.8060  -7.0011)
1628    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
1629       -0.4628  -0.6450  -0.6082
1630        0.8168  -0.0436  -0.5753
1631       -6.8179  -3.9778  -5.9887)
1632    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
1633        0.8103  -0.5790   0.0906
1634       -0.0255  -0.1894  -0.9816
1635        6.1203  -7.1051   3.1984)
1636    #(  2.6760  -8.4960   3.2880) ; P
1637    #(  1.4950  -7.6230   3.4770) ; O1P
1638    #(  2.9490  -9.4640   4.3740) ; O2P
1639    #(  3.9730  -7.5950   3.0340) ; O5*
1640    #(  4.3825  -6.6585   4.0489) ; C5*
1641    #(  4.6841  -7.2019   4.9443) ; H5*
1642    #(  3.6189  -5.8889   4.1625) ; H5**
1643    #(  5.6255  -5.9175   3.5998) ; C4*
1644    #(  5.8732  -5.1228   4.3034) ; H4*
1645    #(  6.7337  -6.8605   3.5222) ; O4*
1646    #(  7.5932  -6.4923   2.4548) ; C1*
1647    #(  8.5661  -6.2983   2.9064) ; H1*
1648    #(  7.0527  -5.2012   1.8322) ; C2*
1649    #(  7.1627  -5.2525   0.7490) ; H2**
1650    #(  7.6666  -4.1249   2.4880) ; O2*
1651    #(  8.5944  -4.2543   2.6981) ; H2*
1652    #(  5.5661  -5.3029   2.2009) ; C3*
1653    #(  5.0841  -6.0018   1.5172) ; H3*
1654    #(  4.9062  -4.0452   2.2042) ; O3*
1655    #(  7.6298  -7.6136   1.4752) ; N1
1656    #(  8.5977  -9.5977   0.7329) ; N3
1657    #(  8.5951  -8.5745   1.6594) ; C2
1658    #(  7.7372  -9.7371  -0.3364) ; C4
1659    #(  6.7596  -8.6801  -0.4476) ; C5
1660    #(  6.7338  -7.6721   0.4408) ; C6
1661    #(  7.8849 -10.7881  -1.1289) ; N4
1662    #(  9.3993  -8.5377   2.5743) ; O2
1663    #(  7.2499 -10.8809  -1.9088) ; H41
1664    #(  8.6122 -11.4649  -0.9468) ; H42
1665    #(  6.0317  -8.6941  -1.2588) ; H5
1666    #(  5.9901  -6.8809   0.3459) ; H6
1667  ))
1668
1669(define rC06
1670  (make-constant-rC
1671    #( -0.9837   0.0476  -0.1733  ; dgf-base-tfo
1672       -0.1792  -0.3353   0.9249
1673       -0.0141   0.9409   0.3384
1674        5.7793  -5.2303   4.5997)
1675    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
1676        0.0649   0.4366  -0.8973
1677        0.5521  -0.7648  -0.3322
1678        1.6833   6.8060  -7.0011)
1679    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
1680       -0.4628  -0.6450  -0.6082
1681        0.8168  -0.0436  -0.5753
1682       -6.8179  -3.9778  -5.9887)
1683    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
1684        0.8103  -0.5790   0.0906
1685       -0.0255  -0.1894  -0.9816
1686        6.1203  -7.1051   3.1984)
1687    #(  2.6760  -8.4960   3.2880) ; P
1688    #(  1.4950  -7.6230   3.4770) ; O1P
1689    #(  2.9490  -9.4640   4.3740) ; O2P
1690    #(  3.9730  -7.5950   3.0340) ; O5*
1691    #(  3.9938  -6.7042   1.9023) ; C5*
1692    #(  3.2332  -5.9343   2.0319) ; H5*
1693    #(  3.9666  -7.2863   0.9812) ; H5**
1694    #(  5.3098  -5.9546   1.8564) ; C4*
1695    #(  5.3863  -5.3702   0.9395) ; H4*
1696    #(  5.3851  -5.0642   3.0076) ; O4*
1697    #(  6.7315  -4.9724   3.4462) ; C1*
1698    #(  7.0033  -3.9202   3.3619) ; H1*
1699    #(  7.5997  -5.8018   2.4948) ; C2*
1700    #(  8.3627  -6.3254   3.0707) ; H2**
1701    #(  8.0410  -4.9501   1.4724) ; O2*
1702    #(  8.2781  -4.0644   1.7570) ; H2*
1703    #(  6.5701  -6.8129   1.9714) ; C3*
1704    #(  6.4186  -7.5809   2.7299) ; H3*
1705    #(  6.9357  -7.3841   0.7235) ; O3*
1706    #(  6.8024  -5.4718   4.8475) ; N1
1707    #(  6.6920  -5.0495   7.1354) ; N3
1708    #(  6.6201  -4.5500   5.8506) ; C2
1709    #(  6.9254  -6.3614   7.4926) ; C4
1710    #(  7.1046  -7.2543   6.3718) ; C5
1711    #(  7.0391  -6.7951   5.1106) ; C6
1712    #(  6.9614  -6.6648   8.7815) ; N4
1713    #(  6.4083  -3.3696   5.6340) ; O2
1714    #(  7.1329  -7.6280   9.0324) ; H41
1715    #(  6.8204  -5.9469   9.4777) ; H42
1716    #(  7.2954  -8.3135   6.5440) ; H5
1717    #(  7.1753  -7.4798   4.2735) ; H6
1718  ))
1719
1720(define rC07
1721  (make-constant-rC
1722    #(  0.0033   0.2720  -0.9623  ; dgf-base-tfo
1723        0.3013  -0.9179  -0.2584
1724       -0.9535  -0.2891  -0.0850
1725       43.0403  13.7233  34.5710)
1726    #(  0.9187   0.2887   0.2694  ; P-O3*-275-tfo
1727        0.0302  -0.7316   0.6811
1728        0.3938  -0.6176  -0.6808
1729      -48.4330  26.3254  13.6383)
1730    #( -0.1504   0.7744  -0.6145  ; P-O3*-180-tfo
1731        0.7581   0.4893   0.4311
1732        0.6345  -0.4010  -0.6607
1733      -31.9784 -13.4285  44.9650)
1734    #( -0.6236  -0.7810  -0.0337  ; P-O3*-60-tfo
1735       -0.6890   0.5694  -0.4484
1736        0.3694  -0.2564  -0.8932
1737       12.1105  30.8774  46.0946)
1738    #( 33.3400  11.0980  46.1750) ; P
1739    #( 34.5130  10.2320  46.4660) ; O1P
1740    #( 33.4130  12.3960  46.9340) ; O2P
1741    #( 31.9810  10.3390  46.4820) ; O5*
1742    #( 30.8152  11.1619  46.2003) ; C5*
1743    #( 30.4519  10.9454  45.1957) ; H5*
1744    #( 31.0379  12.2016  46.4400) ; H5**
1745    #( 29.7081  10.7448  47.1428) ; C4*
1746    #( 28.8710  11.4416  47.0982) ; H4*
1747    #( 29.2550   9.4394  46.8162) ; O4*
1748    #( 29.3907   8.5625  47.9460) ; C1*
1749    #( 28.4416   8.5669  48.4819) ; H1*
1750    #( 30.4468   9.2031  48.7952) ; C2*
1751    #( 31.4222   8.9651  48.3709) ; H2**
1752    #( 30.3701   8.9157  50.1624) ; O2*
1753    #( 30.0652   8.0304  50.3740) ; H2*
1754    #( 30.1622  10.6879  48.6120) ; C3*
1755    #( 31.0952  11.2399  48.7254) ; H3*
1756    #( 29.1076  11.1535  49.4702) ; O3*
1757    #( 29.7883   7.2209  47.5235) ; N1
1758    #( 29.1825   5.0438  46.8275) ; N3
1759    #( 28.8008   6.2912  47.2263) ; C2
1760    #( 30.4888   4.6890  46.7186) ; C4
1761    #( 31.5034   5.6405  47.0249) ; C5
1762    #( 31.1091   6.8691  47.4156) ; C6
1763    #( 30.8109   3.4584  46.3336) ; N4
1764    #( 27.6171   6.5989  47.3189) ; O2
1765    #( 31.7923   3.2301  46.2638) ; H41
1766    #( 30.0880   2.7857  46.1215) ; H42
1767    #( 32.5542   5.3634  46.9395) ; H5
1768    #( 31.8523   7.6279  47.6603) ; H6
1769  ))
1770
1771(define rC08
1772  (make-constant-rC
1773    #(  0.0797  -0.6026  -0.7941  ; dgf-base-tfo
1774        0.7939   0.5201  -0.3150
1775        0.6028  -0.6054   0.5198
1776      -36.8341  41.5293   1.6628)
1777    #(  0.9187   0.2887   0.2694  ; P-O3*-275-tfo
1778        0.0302  -0.7316   0.6811
1779        0.3938  -0.6176  -0.6808
1780      -48.4330  26.3254  13.6383)
1781    #( -0.1504   0.7744  -0.6145  ; P-O3*-180-tfo
1782        0.7581   0.4893   0.4311
1783        0.6345  -0.4010  -0.6607
1784      -31.9784 -13.4285  44.9650)
1785    #( -0.6236  -0.7810  -0.0337  ; P-O3*-60-tfo
1786       -0.6890   0.5694  -0.4484
1787        0.3694  -0.2564  -0.8932
1788       12.1105  30.8774  46.0946)
1789    #( 33.3400  11.0980  46.1750) ; P
1790    #( 34.5130  10.2320  46.4660) ; O1P
1791    #( 33.4130  12.3960  46.9340) ; O2P
1792    #( 31.9810  10.3390  46.4820) ; O5*
1793    #( 31.8779   9.9369  47.8760) ; C5*
1794    #( 31.3239  10.6931  48.4322) ; H5*
1795    #( 32.8647   9.6624  48.2489) ; H5**
1796    #( 31.0429   8.6773  47.9401) ; C4*
1797    #( 31.0779   8.2331  48.9349) ; H4*
1798    #( 29.6956   8.9669  47.5983) ; O4*
1799    #( 29.2784   8.1700  46.4782) ; C1*
1800    #( 28.8006   7.2731  46.8722) ; H1*
1801    #( 30.5544   7.7940  45.7875) ; C2*
1802    #( 30.8837   8.6410  45.1856) ; H2**
1803    #( 30.5100   6.6007  45.0582) ; O2*
1804    #( 29.6694   6.4168  44.6326) ; H2*
1805    #( 31.5146   7.5954  46.9527) ; C3*
1806    #( 32.5255   7.8261  46.6166) ; H3*
1807    #( 31.3876   6.2951  47.5516) ; O3*
1808    #( 28.3976   8.9302  45.5933) ; N1
1809    #( 26.2155   9.6135  44.9910) ; N3
1810    #( 27.0281   8.8961  45.8192) ; C2
1811    #( 26.7044  10.3489  43.9595) ; C4
1812    #( 28.1088  10.3837  43.7247) ; C5
1813    #( 28.8978   9.6708  44.5535) ; C6
1814    #( 25.8715  11.0249  43.1749) ; N4
1815    #( 26.5733   8.2371  46.7484) ; O2
1816    #( 26.2707  11.5609  42.4177) ; H41
1817    #( 24.8760  10.9939  43.3427) ; H42
1818    #( 28.5089  10.9722  42.8990) ; H5
1819    #( 29.9782   9.6687  44.4097) ; H6
1820  ))
1821
1822(define rC09
1823  (make-constant-rC
1824    #(  0.8727   0.4760  -0.1091  ; dgf-base-tfo
1825       -0.4188   0.6148  -0.6682
1826       -0.2510   0.6289   0.7359
1827       -8.1687 -52.0761 -25.0726)
1828    #(  0.9187   0.2887   0.2694  ; P-O3*-275-tfo
1829        0.0302  -0.7316   0.6811
1830        0.3938  -0.6176  -0.6808
1831      -48.4330  26.3254  13.6383)
1832    #( -0.1504   0.7744  -0.6145  ; P-O3*-180-tfo
1833        0.7581   0.4893   0.4311
1834        0.6345  -0.4010  -0.6607
1835      -31.9784 -13.4285  44.9650)
1836    #( -0.6236  -0.7810  -0.0337  ; P-O3*-60-tfo
1837       -0.6890   0.5694  -0.4484
1838        0.3694  -0.2564  -0.8932
1839       12.1105  30.8774  46.0946)
1840    #( 33.3400  11.0980  46.1750) ; P
1841    #( 34.5130  10.2320  46.4660) ; O1P
1842    #( 33.4130  12.3960  46.9340) ; O2P
1843    #( 31.9810  10.3390  46.4820) ; O5*
1844    #( 30.8152  11.1619  46.2003) ; C5*
1845    #( 30.4519  10.9454  45.1957) ; H5*
1846    #( 31.0379  12.2016  46.4400) ; H5**
1847    #( 29.7081  10.7448  47.1428) ; C4*
1848    #( 29.4506   9.6945  47.0059) ; H4*
1849    #( 30.1045  10.9634  48.4885) ; O4*
1850    #( 29.1794  11.8418  49.1490) ; C1*
1851    #( 28.4388  11.2210  49.6533) ; H1*
1852    #( 28.5211  12.6008  48.0367) ; C2*
1853    #( 29.1947  13.3949  47.7147) ; H2**
1854    #( 27.2316  13.0683  48.3134) ; O2*
1855    #( 27.0851  13.3391  49.2227) ; H2*
1856    #( 28.4131  11.5507  46.9391) ; C3*
1857    #( 28.4451  12.0512  45.9713) ; H3*
1858    #( 27.2707  10.6955  47.1097) ; O3*
1859    #( 29.8751  12.7405  50.0682) ; N1
1860    #( 30.7172  13.1841  52.2328) ; N3
1861    #( 30.0617  12.3404  51.3847) ; C2
1862    #( 31.1834  14.3941  51.8297) ; C4
1863    #( 30.9913  14.8074  50.4803) ; C5
1864    #( 30.3434  13.9610  49.6548) ; C6
1865    #( 31.8090  15.1847  52.6957) ; N4
1866    #( 29.6470  11.2494  51.7616) ; O2
1867    #( 32.1422  16.0774  52.3606) ; H41
1868    #( 31.9392  14.8893  53.6527) ; H42
1869    #( 31.3632  15.7771  50.1491) ; H5
1870    #( 30.1742  14.2374  48.6141) ; H6
1871  ))
1872
1873(define rC10
1874  (make-constant-rC
1875    #(  0.1549   0.8710  -0.4663  ; dgf-base-tfo
1876        0.6768  -0.4374  -0.5921
1877       -0.7197  -0.2239  -0.6572
1878       25.2447 -14.1920  50.3201)
1879    #(  0.9187   0.2887   0.2694  ; P-O3*-275-tfo
1880        0.0302  -0.7316   0.6811
1881        0.3938  -0.6176  -0.6808
1882      -48.4330  26.3254  13.6383)
1883    #( -0.1504   0.7744  -0.6145  ; P-O3*-180-tfo
1884        0.7581   0.4893   0.4311
1885        0.6345  -0.4010  -0.6607
1886      -31.9784 -13.4285  44.9650)
1887    #( -0.6236  -0.7810  -0.0337  ; P-O3*-60-tfo
1888       -0.6890   0.5694  -0.4484
1889        0.3694  -0.2564  -0.8932
1890       12.1105  30.8774  46.0946)
1891    #( 33.3400  11.0980  46.1750) ; P
1892    #( 34.5130  10.2320  46.4660) ; O1P
1893    #( 33.4130  12.3960  46.9340) ; O2P
1894    #( 31.9810  10.3390  46.4820) ; O5*
1895    #( 31.8779   9.9369  47.8760) ; C5*
1896    #( 31.3239  10.6931  48.4322) ; H5*
1897    #( 32.8647   9.6624  48.2489) ; H5**
1898    #( 31.0429   8.6773  47.9401) ; C4*
1899    #( 30.0440   8.8473  47.5383) ; H4*
1900    #( 31.6749   7.6351  47.2119) ; O4*
1901    #( 31.9159   6.5022  48.0616) ; C1*
1902    #( 31.0691   5.8243  47.9544) ; H1*
1903    #( 31.9300   7.0685  49.4493) ; C2*
1904    #( 32.9024   7.5288  49.6245) ; H2**
1905    #( 31.5672   6.1750  50.4632) ; O2*
1906    #( 31.8416   5.2663  50.3200) ; H2*
1907    #( 30.8618   8.1514  49.3749) ; C3*
1908    #( 31.1122   8.9396  50.0850) ; H3*
1909    #( 29.5351   7.6245  49.5409) ; O3*
1910    #( 33.1890   5.8629  47.7343) ; N1
1911    #( 34.4004   4.2636  46.4828) ; N3
1912    #( 33.2062   4.8497  46.7851) ; C2
1913    #( 35.5600   4.6374  47.0822) ; C4
1914    #( 35.5444   5.6751  48.0577) ; C5
1915    #( 34.3565   6.2450  48.3432) ; C6
1916    #( 36.6977   4.0305  46.7598) ; N4
1917    #( 32.1661   4.5034  46.2348) ; O2
1918    #( 37.5405   4.3347  47.2259) ; H41
1919    #( 36.7033   3.2923  46.0706) ; H42
1920    #( 36.4713   5.9811  48.5428) ; H5
1921    #( 34.2986   7.0426  49.0839) ; H6
1922  ))
1923
1924(define rCs
1925  (list rC01 rC02 rC03 rC04 rC05 rC06 rC07 rC08 rC09 rC10))
1926
1927(define rG
1928  (make-constant-rG
1929    #( -0.0018  -0.8207   0.5714  ; dgf-base-tfo
1930        0.2679  -0.5509  -0.7904
1931        0.9634   0.1517   0.2209
1932        0.0073   8.4030   0.6232)
1933    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
1934       -0.0433  -0.4257   0.9038
1935       -0.5788   0.7480   0.3246
1936        1.5227   6.9114  -7.0765)
1937    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
1938        0.4552   0.6637   0.5935
1939       -0.8042   0.0203   0.5941
1940       -6.9472  -4.1186  -5.9108)
1941    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
1942       -0.8247   0.5587  -0.0878
1943        0.0426   0.2162   0.9754
1944        6.2694  -7.0540   3.3316)
1945    #(  2.8930   8.5380  -3.3280) ; P
1946    #(  1.6980   7.6960  -3.5570) ; O1P
1947    #(  3.2260   9.5010  -4.4020) ; O2P
1948    #(  4.1590   7.6040  -3.0340) ; O5*
1949    #(  5.4550   8.2120  -2.8810) ; C5*
1950    #(  5.4546   8.8508  -1.9978) ; H5*
1951    #(  5.7588   8.6625  -3.8259) ; H5**
1952    #(  6.4970   7.1480  -2.5980) ; C4*
1953    #(  7.4896   7.5919  -2.5214) ; H4*
1954    #(  6.1630   6.4860  -1.3440) ; O4*
1955    #(  6.5400   5.1200  -1.4190) ; C1*
1956    #(  7.2763   4.9681  -0.6297) ; H1*
1957    #(  7.1940   4.8830  -2.7770) ; C2*
1958    #(  6.8667   3.9183  -3.1647) ; H2**
1959    #(  8.5860   5.0910  -2.6140) ; O2*
1960    #(  8.9510   4.7626  -1.7890) ; H2*
1961    #(  6.5720   6.0040  -3.6090) ; C3*
1962    #(  5.5636   5.7066  -3.8966) ; H3*
1963    #(  7.3801   6.3562  -4.7350) ; O3*
1964    #(  4.7150   0.4910  -0.1360) ; N1
1965    #(  6.3490   2.1730  -0.6020) ; N3
1966    #(  5.9530   0.9650  -0.2670) ; C2
1967    #(  5.2900   2.9790  -0.8260) ; C4
1968    #(  3.9720   2.6390  -0.7330) ; C5
1969    #(  3.6770   1.3160  -0.3660) ; C6
1970    #(  6.8426   0.0056  -0.0019) ; N2
1971    #(  3.1660   3.7290  -1.0360) ; N7
1972    #(  5.3170   4.2990  -1.1930) ; N9
1973    #(  4.0100   4.6780  -1.2990) ; C8
1974    #(  2.4280   0.8450  -0.2360) ; O6
1975    #(  4.6151  -0.4677   0.1305) ; H1
1976    #(  6.6463  -0.9463   0.2729) ; H21
1977    #(  7.8170   0.2642  -0.0640) ; H22
1978    #(  3.4421   5.5744  -1.5482) ; H8
1979  ))
1980
1981(define rG01
1982  (make-constant-rG
1983    #( -0.0043  -0.8175   0.5759  ; dgf-base-tfo
1984        0.2617  -0.5567  -0.7884
1985        0.9651   0.1473   0.2164
1986        0.0359   8.3929   0.5532)
1987    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
1988       -0.0433  -0.4257   0.9038
1989       -0.5788   0.7480   0.3246
1990        1.5227   6.9114  -7.0765)
1991    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
1992        0.4552   0.6637   0.5935
1993       -0.8042   0.0203   0.5941
1994       -6.9472  -4.1186  -5.9108)
1995    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
1996       -0.8247   0.5587  -0.0878
1997        0.0426   0.2162   0.9754
1998        6.2694  -7.0540   3.3316)
1999    #(  2.8930   8.5380  -3.3280) ; P
2000    #(  1.6980   7.6960  -3.5570) ; O1P
2001    #(  3.2260   9.5010  -4.4020) ; O2P
2002    #(  4.1590   7.6040  -3.0340) ; O5*
2003    #(  5.4352   8.2183  -2.7757) ; C5*
2004    #(  5.3830   8.7883  -1.8481) ; H5*
2005    #(  5.7729   8.7436  -3.6691) ; H5**
2006    #(  6.4830   7.1518  -2.5252) ; C4*
2007    #(  7.4749   7.5972  -2.4482) ; H4*
2008    #(  6.1626   6.4620  -1.2827) ; O4*
2009    #(  6.5431   5.0992  -1.3905) ; C1*
2010    #(  7.2871   4.9328  -0.6114) ; H1*
2011    #(  7.1852   4.8935  -2.7592) ; C2*
2012    #(  6.8573   3.9363  -3.1645) ; H2**
2013    #(  8.5780   5.1025  -2.6046) ; O2*
2014    #(  8.9516   4.7577  -1.7902) ; H2*
2015    #(  6.5522   6.0300  -3.5612) ; C3*
2016    #(  5.5420   5.7356  -3.8459) ; H3*
2017    #(  7.3487   6.4089  -4.6867) ; O3*
2018    #(  4.7442   0.4514  -0.1390) ; N1
2019    #(  6.3687   2.1459  -0.5926) ; N3
2020    #(  5.9795   0.9335  -0.2657) ; C2
2021    #(  5.3052   2.9471  -0.8125) ; C4
2022    #(  3.9891   2.5987  -0.7230) ; C5
2023    #(  3.7016   1.2717  -0.3647) ; C6
2024    #(  6.8745  -0.0224  -0.0058) ; N2
2025    #(  3.1770   3.6859  -1.0198) ; N7
2026    #(  5.3247   4.2695  -1.1710) ; N9
2027    #(  4.0156   4.6415  -1.2759) ; C8
2028    #(  2.4553   0.7925  -0.2390) ; O6
2029    #(  4.6497  -0.5095   0.1212) ; H1
2030    #(  6.6836  -0.9771   0.2627) ; H21
2031    #(  7.8474   0.2424  -0.0653) ; H22
2032    #(  3.4426   5.5361  -1.5199) ; H8
2033  ))
2034
2035(define rG02
2036  (make-constant-rG
2037    #(  0.5566   0.0449   0.8296  ; dgf-base-tfo
2038        0.5125   0.7673  -0.3854
2039       -0.6538   0.6397   0.4041
2040       -9.1161  -3.7679  -2.9968)
2041    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
2042       -0.0433  -0.4257   0.9038
2043       -0.5788   0.7480   0.3246
2044        1.5227   6.9114  -7.0765)
2045    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
2046        0.4552   0.6637   0.5935
2047       -0.8042   0.0203   0.5941
2048       -6.9472  -4.1186  -5.9108)
2049    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
2050       -0.8247   0.5587  -0.0878
2051        0.0426   0.2162   0.9754
2052        6.2694  -7.0540   3.3316)
2053    #(  2.8930   8.5380  -3.3280) ; P
2054    #(  1.6980   7.6960  -3.5570) ; O1P
2055    #(  3.2260   9.5010  -4.4020) ; O2P
2056    #(  4.1590   7.6040  -3.0340) ; O5*
2057    #(  4.5778   6.6594  -4.0364) ; C5*
2058    #(  4.9220   7.1963  -4.9204) ; H5*
2059    #(  3.7996   5.9091  -4.1764) ; H5**
2060    #(  5.7873   5.8869  -3.5482) ; C4*
2061    #(  6.0405   5.0875  -4.2446) ; H4*
2062    #(  6.9135   6.8036  -3.4310) ; O4*
2063    #(  7.7293   6.4084  -2.3392) ; C1*
2064    #(  8.7078   6.1815  -2.7624) ; H1*
2065    #(  7.1305   5.1418  -1.7347) ; C2*
2066    #(  7.2040   5.1982  -0.6486) ; H2**
2067    #(  7.7417   4.0392  -2.3813) ; O2*
2068    #(  8.6785   4.1443  -2.5630) ; H2*
2069    #(  5.6666   5.2728  -2.1536) ; C3*
2070    #(  5.1747   5.9805  -1.4863) ; H3*
2071    #(  4.9997   4.0086  -2.1973) ; O3*
2072    #( 10.3245   8.5459   1.5467) ; N1
2073    #(  9.8051   6.9432  -0.1497) ; N3
2074    #( 10.5175   7.4328   0.8408) ; C2
2075    #(  8.7523   7.7422  -0.4228) ; C4
2076    #(  8.4257   8.9060   0.2099) ; C5
2077    #(  9.2665   9.3242   1.2540) ; C6
2078    #( 11.6077   6.7966   1.2752) ; N2
2079    #(  7.2750   9.4537  -0.3428) ; N7
2080    #(  7.7962   7.5519  -1.3859) ; N9
2081    #(  6.9479   8.6157  -1.2771) ; C8
2082    #(  9.0664  10.4462   1.9610) ; O6
2083    #( 10.9838   8.7524   2.2697) ; H1
2084    #( 12.2274   7.0896   2.0170) ; H21
2085    #( 11.8502   5.9398   0.7984) ; H22
2086    #(  6.0430   8.9853  -1.7594) ; H8
2087  ))
2088
2089(define rG03
2090  (make-constant-rG
2091    #( -0.5021   0.0731   0.8617  ; dgf-base-tfo
2092       -0.8112   0.3054  -0.4986
2093       -0.2996  -0.9494  -0.0940
2094        6.4273  -5.1944  -3.7807)
2095    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
2096       -0.0433  -0.4257   0.9038
2097       -0.5788   0.7480   0.3246
2098        1.5227   6.9114  -7.0765)
2099    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
2100        0.4552   0.6637   0.5935
2101       -0.8042   0.0203   0.5941
2102       -6.9472  -4.1186  -5.9108)
2103    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
2104       -0.8247   0.5587  -0.0878
2105        0.0426   0.2162   0.9754
2106        6.2694  -7.0540   3.3316)
2107    #(  2.8930   8.5380  -3.3280) ; P
2108    #(  1.6980   7.6960  -3.5570) ; O1P
2109    #(  3.2260   9.5010  -4.4020) ; O2P
2110    #(  4.1590   7.6040  -3.0340) ; O5*
2111    #(  4.1214   6.7116  -1.9049) ; C5*
2112    #(  3.3465   5.9610  -2.0607) ; H5*
2113    #(  4.0789   7.2928  -0.9837) ; H5**
2114    #(  5.4170   5.9293  -1.8186) ; C4*
2115    #(  5.4506   5.3400  -0.9023) ; H4*
2116    #(  5.5067   5.0417  -2.9703) ; O4*
2117    #(  6.8650   4.9152  -3.3612) ; C1*
2118    #(  7.1090   3.8577  -3.2603) ; H1*
2119    #(  7.7152   5.7282  -2.3894) ; C2*
2120    #(  8.5029   6.2356  -2.9463) ; H2**
2121    #(  8.1036   4.8568  -1.3419) ; O2*
2122    #(  8.3270   3.9651  -1.6184) ; H2*
2123    #(  6.7003   6.7565  -1.8911) ; C3*
2124    #(  6.5898   7.5329  -2.6482) ; H3*
2125    #(  7.0505   7.2878  -0.6105) ; O3*
2126    #(  9.6740   4.7656  -7.6614) ; N1
2127    #(  9.0739   4.3013  -5.3941) ; N3
2128    #(  9.8416   4.2192  -6.4581) ; C2
2129    #(  7.9885   5.0632  -5.6446) ; C4
2130    #(  7.6822   5.6856  -6.8194) ; C5
2131    #(  8.5831   5.5215  -7.8840) ; C6
2132    #( 10.9733   3.5117  -6.4286) ; N2
2133    #(  6.4857   6.3816  -6.7035) ; N7
2134    #(  6.9740   5.3703  -4.7760) ; N9
2135    #(  6.1133   6.1613  -5.4808) ; C8
2136    #(  8.4084   6.0747  -9.0933) ; O6
2137    #( 10.3759   4.5855  -8.3504) ; H1
2138    #( 11.6254   3.3761  -7.1879) ; H21
2139    #( 11.1917   3.0460  -5.5593) ; H22
2140    #(  5.1705   6.6830  -5.3167) ; H8
2141  ))
2142
2143(define rG04
2144  (make-constant-rG
2145    #( -0.5426  -0.8175   0.1929  ; dgf-base-tfo
2146        0.8304  -0.5567  -0.0237
2147        0.1267   0.1473   0.9809
2148       -0.5075   8.3929   0.2229)
2149    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
2150       -0.0433  -0.4257   0.9038
2151       -0.5788   0.7480   0.3246
2152        1.5227   6.9114  -7.0765)
2153    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
2154        0.4552   0.6637   0.5935
2155       -0.8042   0.0203   0.5941
2156       -6.9472  -4.1186  -5.9108)
2157    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
2158       -0.8247   0.5587  -0.0878
2159        0.0426   0.2162   0.9754
2160        6.2694  -7.0540   3.3316)
2161    #(  2.8930   8.5380  -3.3280) ; P
2162    #(  1.6980   7.6960  -3.5570) ; O1P
2163    #(  3.2260   9.5010  -4.4020) ; O2P
2164    #(  4.1590   7.6040  -3.0340) ; O5*
2165    #(  5.4352   8.2183  -2.7757) ; C5*
2166    #(  5.3830   8.7883  -1.8481) ; H5*
2167    #(  5.7729   8.7436  -3.6691) ; H5**
2168    #(  6.4830   7.1518  -2.5252) ; C4*
2169    #(  7.4749   7.5972  -2.4482) ; H4*
2170    #(  6.1626   6.4620  -1.2827) ; O4*
2171    #(  6.5431   5.0992  -1.3905) ; C1*
2172    #(  7.2871   4.9328  -0.6114) ; H1*
2173    #(  7.1852   4.8935  -2.7592) ; C2*
2174    #(  6.8573   3.9363  -3.1645) ; H2**
2175    #(  8.5780   5.1025  -2.6046) ; O2*
2176    #(  8.9516   4.7577  -1.7902) ; H2*
2177    #(  6.5522   6.0300  -3.5612) ; C3*
2178    #(  5.5420   5.7356  -3.8459) ; H3*
2179    #(  7.3487   6.4089  -4.6867) ; O3*
2180    #(  3.6343   2.6680   2.0783) ; N1
2181    #(  5.4505   3.9805   1.2446) ; N3
2182    #(  4.7540   3.3816   2.1851) ; C2
2183    #(  4.8805   3.7951   0.0354) ; C4
2184    #(  3.7416   3.0925  -0.2305) ; C5
2185    #(  3.0873   2.4980   0.8606) ; C6
2186    #(  5.1433   3.4373   3.4609) ; N2
2187    #(  3.4605   3.1184  -1.5906) ; N7
2188    #(  5.3247   4.2695  -1.1710) ; N9
2189    #(  4.4244   3.8244  -2.0953) ; C8
2190    #(  1.9600   1.7805   0.7462) ; O6
2191    #(  3.2489   2.2879   2.9191) ; H1
2192    #(  4.6785   3.0243   4.2568) ; H21
2193    #(  5.9823   3.9654   3.6539) ; H22
2194    #(  4.2675   3.8876  -3.1721) ; H8
2195  ))
2196
2197(define rG05
2198  (make-constant-rG
2199    #( -0.5891   0.0449   0.8068  ; dgf-base-tfo
2200        0.5375   0.7673   0.3498
2201       -0.6034   0.6397  -0.4762
2202       -0.3019  -3.7679  -9.5913)
2203    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
2204       -0.0433  -0.4257   0.9038
2205       -0.5788   0.7480   0.3246
2206        1.5227   6.9114  -7.0765)
2207    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
2208        0.4552   0.6637   0.5935
2209       -0.8042   0.0203   0.5941
2210       -6.9472  -4.1186  -5.9108)
2211    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
2212       -0.8247   0.5587  -0.0878
2213        0.0426   0.2162   0.9754
2214        6.2694  -7.0540   3.3316)
2215    #(  2.8930   8.5380  -3.3280) ; P
2216    #(  1.6980   7.6960  -3.5570) ; O1P
2217    #(  3.2260   9.5010  -4.4020) ; O2P
2218    #(  4.1590   7.6040  -3.0340) ; O5*
2219    #(  4.5778   6.6594  -4.0364) ; C5*
2220    #(  4.9220   7.1963  -4.9204) ; H5*
2221    #(  3.7996   5.9091  -4.1764) ; H5**
2222    #(  5.7873   5.8869  -3.5482) ; C4*
2223    #(  6.0405   5.0875  -4.2446) ; H4*
2224    #(  6.9135   6.8036  -3.4310) ; O4*
2225    #(  7.7293   6.4084  -2.3392) ; C1*
2226    #(  8.7078   6.1815  -2.7624) ; H1*
2227    #(  7.1305   5.1418  -1.7347) ; C2*
2228    #(  7.2040   5.1982  -0.6486) ; H2**
2229    #(  7.7417   4.0392  -2.3813) ; O2*
2230    #(  8.6785   4.1443  -2.5630) ; H2*
2231    #(  5.6666   5.2728  -2.1536) ; C3*
2232    #(  5.1747   5.9805  -1.4863) ; H3*
2233    #(  4.9997   4.0086  -2.1973) ; O3*
2234    #( 10.2594  10.6774  -1.0056) ; N1
2235    #(  9.7528   8.7080  -2.2631) ; N3
2236    #( 10.4471   9.7876  -1.9791) ; C2
2237    #(  8.7271   8.5575  -1.3991) ; C4
2238    #(  8.4100   9.3803  -0.3580) ; C5
2239    #(  9.2294  10.5030  -0.1574) ; C6
2240    #( 11.5110  10.1256  -2.7114) ; N2
2241    #(  7.2891   8.9068   0.3121) ; N7
2242    #(  7.7962   7.5519  -1.3859) ; N9
2243    #(  6.9702   7.8292  -0.3353) ; C8
2244    #(  9.0349  11.3951   0.8250) ; O6
2245    #( 10.9013  11.4422  -0.9512) ; H1
2246    #( 12.1031  10.9341  -2.5861) ; H21
2247    #( 11.7369   9.5180  -3.4859) ; H22
2248    #(  6.0888   7.3990   0.1403) ; H8
2249  ))
2250
2251(define rG06
2252  (make-constant-rG
2253    #( -0.9815   0.0731  -0.1772  ; dgf-base-tfo
2254        0.1912   0.3054  -0.9328
2255       -0.0141  -0.9494  -0.3137
2256        5.7506  -5.1944   4.7470)
2257    #( -0.8143  -0.5091  -0.2788  ; P-O3*-275-tfo
2258       -0.0433  -0.4257   0.9038
2259       -0.5788   0.7480   0.3246
2260        1.5227   6.9114  -7.0765)
2261    #(  0.3822  -0.7477   0.5430  ; P-O3*-180-tfo
2262        0.4552   0.6637   0.5935
2263       -0.8042   0.0203   0.5941
2264       -6.9472  -4.1186  -5.9108)
2265    #(  0.5640   0.8007  -0.2022  ; P-O3*-60-tfo
2266       -0.8247   0.5587  -0.0878
2267        0.0426   0.2162   0.9754
2268        6.2694  -7.0540   3.3316)
2269    #(  2.8930   8.5380  -3.3280) ; P
2270    #(  1.6980   7.6960  -3.5570) ; O1P
2271    #(  3.2260   9.5010  -4.4020) ; O2P
2272    #(  4.1590   7.6040  -3.0340) ; O5*
2273    #(  4.1214   6.7116  -1.9049) ; C5*
2274    #(  3.3465   5.9610  -2.0607) ; H5*
2275    #(  4.0789   7.2928  -0.9837) ; H5**
2276    #(  5.4170   5.9293  -1.8186) ; C4*
2277    #(  5.4506   5.3400  -0.9023) ; H4*
2278    #(  5.5067   5.0417  -2.9703) ; O4*
2279    #(  6.8650   4.9152  -3.3612) ; C1*
2280    #(  7.1090   3.8577  -3.2603) ; H1*
2281    #(  7.7152   5.7282  -2.3894) ; C2*
2282    #(  8.5029   6.2356  -2.9463) ; H2**
2283    #(  8.1036   4.8568  -1.3419) ; O2*
2284    #(  8.3270   3.9651  -1.6184) ; H2*
2285    #(  6.7003   6.7565  -1.8911) ; C3*
2286    #(  6.5898   7.5329  -2.6482) ; H3*
2287    #(  7.0505   7.2878  -0.6105) ; O3*
2288    #(  6.6624   3.5061  -8.2986) ; N1
2289    #(  6.5810   3.2570  -5.9221) ; N3
2290    #(  6.5151   2.8263  -7.1625) ; C2
2291    #(  6.8364   4.5817  -5.8882) ; C4
2292    #(  7.0116   5.4064  -6.9609) ; C5
2293    #(  6.9173   4.8260  -8.2361) ; C6
2294    #(  6.2717   1.5402  -7.4250) ; N2
2295    #(  7.2573   6.7070  -6.5394) ; N7
2296    #(  6.9740   5.3703  -4.7760) ; N9
2297    #(  7.2238   6.6275  -5.2453) ; C8
2298    #(  7.0668   5.5163  -9.3763) ; O6
2299    #(  6.5754   2.9964  -9.1545) ; H1
2300    #(  6.1908   1.1105  -8.3354) ; H21
2301    #(  6.1346   0.9352  -6.6280) ; H22
2302    #(  7.4108   7.6227  -4.8418) ; H8
2303  ))
2304
2305(define rG07
2306  (make-constant-rG
2307    #(  0.0894  -0.6059   0.7905  ; dgf-base-tfo
2308       -0.6810   0.5420   0.4924
2309       -0.7268  -0.5824  -0.3642
2310       34.1424  45.9610 -11.8600)
2311    #( -0.8644  -0.4956  -0.0851  ; P-O3*-275-tfo
2312       -0.0427   0.2409  -0.9696
2313        0.5010  -0.8345  -0.2294
2314        4.0167  54.5377  12.4779)
2315    #(  0.3706  -0.6167   0.6945  ; P-O3*-180-tfo
2316       -0.2867  -0.7872  -0.5460
2317        0.8834   0.0032  -0.4686
2318      -52.9020  18.6313  -0.6709)
2319    #(  0.4155   0.9025  -0.1137  ; P-O3*-60-tfo
2320        0.9040  -0.4236  -0.0582
2321       -0.1007  -0.0786  -0.9918
2322       -7.6624 -25.2080  49.5181)
2323    #( 31.3810   0.1400  47.5810) ; P
2324    #( 29.9860   0.6630  47.6290) ; O1P
2325    #( 31.7210  -0.6460  48.8090) ; O2P
2326    #( 32.4940   1.2540  47.2740) ; O5*
2327    #( 33.8709   0.7918  47.2113) ; C5*
2328    #( 34.1386   0.5870  46.1747) ; H5*
2329    #( 34.0186  -0.0095  47.9353) ; H5**
2330    #( 34.7297   1.9687  47.6685) ; C4*
2331    #( 35.7723   1.6845  47.8113) ; H4*
2332    #( 34.6455   2.9768  46.6660) ; O4*
2333    #( 34.1690   4.1829  47.2627) ; C1*
2334    #( 35.0437   4.7633  47.5560) ; H1*
2335    #( 33.4145   3.7532  48.4954) ; C2*
2336    #( 32.4340   3.3797  48.2001) ; H2**
2337    #( 33.3209   4.6953  49.5217) ; O2*
2338    #( 33.2374   5.6059  49.2295) ; H2*
2339    #( 34.2724   2.5970  48.9773) ; C3*
2340    #( 33.6373   1.8935  49.5157) ; H3*
2341    #( 35.3453   3.1884  49.7285) ; O3*
2342    #( 34.0511   7.8930  43.7791) ; N1
2343    #( 34.9937   6.3369  45.3199) ; N3
2344    #( 35.0882   7.3126  44.4200) ; C2
2345    #( 33.7190   5.9650  45.5374) ; C4
2346    #( 32.5845   6.4770  44.9458) ; C5
2347    #( 32.7430   7.5179  43.9914) ; C6
2348    #( 36.3030   7.7827  44.1036) ; N2
2349    #( 31.4499   5.8335  45.4368) ; N7
2350    #( 33.2760   4.9817  46.4043) ; N9
2351    #( 31.9235   4.9639  46.2934) ; C8
2352    #( 31.8602   8.1000  43.3695) ; O6
2353    #( 34.2623   8.6223  43.1283) ; H1
2354    #( 36.5188   8.5081  43.4347) ; H21
2355    #( 37.0888   7.3524  44.5699) ; H22
2356    #( 31.0815   4.4201  46.7218) ; H8
2357  ))
2358
2359(define rG08
2360  (make-constant-rG
2361    #(  0.2224   0.6335   0.7411  ; dgf-base-tfo
2362       -0.3644  -0.6510   0.6659
2363        0.9043  -0.4181   0.0861
2364      -47.6824  -0.5823 -31.7554)
2365    #( -0.8644  -0.4956  -0.0851  ; P-O3*-275-tfo
2366       -0.0427   0.2409  -0.9696
2367        0.5010  -0.8345  -0.2294
2368        4.0167  54.5377  12.4779)
2369    #(  0.3706  -0.6167   0.6945  ; P-O3*-180-tfo
2370       -0.2867  -0.7872  -0.5460
2371        0.8834   0.0032  -0.4686
2372      -52.9020  18.6313  -0.6709)
2373    #(  0.4155   0.9025  -0.1137  ; P-O3*-60-tfo
2374        0.9040  -0.4236  -0.0582
2375       -0.1007  -0.0786  -0.9918
2376       -7.6624 -25.2080  49.5181)
2377    #( 31.3810   0.1400  47.5810) ; P
2378    #( 29.9860   0.6630  47.6290) ; O1P
2379    #( 31.7210  -0.6460  48.8090) ; O2P
2380    #( 32.4940   1.2540  47.2740) ; O5*
2381    #( 32.5924   2.3488  48.2255) ; C5*
2382    #( 33.3674   2.1246  48.9584) ; H5*
2383    #( 31.5994   2.5917  48.6037) ; H5**
2384    #( 33.0722   3.5577  47.4258) ; C4*
2385    #( 33.0310   4.4778  48.0089) ; H4*
2386    #( 34.4173   3.3055  47.0316) ; O4*
2387    #( 34.5056   3.3910  45.6094) ; C1*
2388    #( 34.7881   4.4152  45.3663) ; H1*
2389    #( 33.1122   3.1198  45.1010) ; C2*
2390    #( 32.9230   2.0469  45.1369) ; H2**
2391    #( 32.7946   3.6590  43.8529) ; O2*
2392    #( 33.5170   3.6707  43.2207) ; H2*
2393    #( 32.2730   3.8173  46.1566) ; C3*
2394    #( 31.3094   3.3123  46.2244) ; H3*
2395    #( 32.2391   5.2039  45.7807) ; O3*
2396    #( 39.3337   2.7157  44.1441) ; N1
2397    #( 37.4430   3.8242  45.0824) ; N3
2398    #( 38.7276   3.7646  44.7403) ; C2
2399    #( 36.7791   2.6963  44.7704) ; C4
2400    #( 37.2860   1.5653  44.1678) ; C5
2401    #( 38.6647   1.5552  43.8235) ; C6
2402    #( 39.5123   4.8216  44.9936) ; N2
2403    #( 36.2829   0.6110  44.0078) ; N7
2404    #( 35.4394   2.4314  44.9931) ; N9
2405    #( 35.2180   1.1815  44.5128) ; C8
2406    #( 39.2907   0.6514  43.2796) ; O6
2407    #( 40.3076   2.8048  43.9352) ; H1
2408    #( 40.4994   4.9066  44.7977) ; H21
2409    #( 39.0738   5.6108  45.4464) ; H22
2410    #( 34.3856   0.4842  44.4185) ; H8
2411  ))
2412
2413(define rG09
2414  (make-constant-rG
2415    #( -0.9699  -0.1688  -0.1753  ; dgf-base-tfo
2416       -0.1050  -0.3598   0.9271
2417       -0.2196   0.9176   0.3312
2418       45.6217 -38.9484 -12.3208)
2419    #( -0.8644  -0.4956  -0.0851  ; P-O3*-275-tfo
2420       -0.0427   0.2409  -0.9696
2421        0.5010  -0.8345  -0.2294
2422        4.0167  54.5377  12.4779)
2423    #(  0.3706  -0.6167   0.6945  ; P-O3*-180-tfo
2424       -0.2867  -0.7872  -0.5460
2425        0.8834   0.0032  -0.4686
2426      -52.9020  18.6313  -0.6709)
2427    #(  0.4155   0.9025  -0.1137  ; P-O3*-60-tfo
2428        0.9040  -0.4236  -0.0582
2429       -0.1007  -0.0786  -0.9918
2430       -7.6624 -25.2080  49.5181)
2431    #( 31.3810   0.1400  47.5810) ; P
2432    #( 29.9860   0.6630  47.6290) ; O1P
2433    #( 31.7210  -0.6460  48.8090) ; O2P
2434    #( 32.4940   1.2540  47.2740) ; O5*
2435    #( 33.8709   0.7918  47.2113) ; C5*
2436    #( 34.1386   0.5870  46.1747) ; H5*
2437    #( 34.0186  -0.0095  47.9353) ; H5**
2438    #( 34.7297   1.9687  47.6685) ; C4*
2439    #( 34.5880   2.8482  47.0404) ; H4*
2440    #( 34.3575   2.2770  49.0081) ; O4*
2441    #( 35.5157   2.1993  49.8389) ; C1*
2442    #( 35.9424   3.2010  49.8893) ; H1*
2443    #( 36.4701   1.2820  49.1169) ; C2*
2444    #( 36.1545   0.2498  49.2683) ; H2**
2445    #( 37.8262   1.4547  49.4008) ; O2*
2446    #( 38.0227   1.6945  50.3094) ; H2*
2447    #( 36.2242   1.6797  47.6725) ; C3*
2448    #( 36.4297   0.8197  47.0351) ; H3*
2449    #( 37.0289   2.8480  47.4426) ; O3*
2450    #( 34.3005   3.5042  54.6070) ; N1
2451    #( 34.7693   3.7936  52.2874) ; N3
2452    #( 34.4484   4.2541  53.4939) ; C2
2453    #( 34.9354   2.4584  52.2785) ; C4
2454    #( 34.8092   1.5915  53.3422) ; C5
2455    #( 34.4646   2.1367  54.6085) ; C6
2456    #( 34.2514   5.5708  53.6503) ; N2
2457    #( 35.0641   0.2835  52.9337) ; N7
2458    #( 35.2669   1.6690  51.1915) ; N9
2459    #( 35.3288   0.3954  51.6563) ; C8
2460    #( 34.3151   1.5317  55.6650) ; O6
2461    #( 34.0623   3.9797  55.4539) ; H1
2462    #( 33.9950   6.0502  54.5016) ; H21
2463    #( 34.3512   6.1432  52.8242) ; H22
2464    #( 35.5414  -0.6006  51.2679) ; H8
2465  ))
2466
2467(define rG10
2468  (make-constant-rG
2469    #( -0.0980  -0.9723   0.2122  ; dgf-base-tfo
2470       -0.9731   0.1383   0.1841
2471       -0.2083  -0.1885  -0.9597
2472       17.8469  38.8265  37.0475)
2473    #( -0.8644  -0.4956  -0.0851  ; P-O3*-275-tfo
2474       -0.0427   0.2409  -0.9696
2475        0.5010  -0.8345  -0.2294
2476        4.0167  54.5377  12.4779)
2477    #(  0.3706  -0.6167   0.6945  ; P-O3*-180-tfo
2478       -0.2867  -0.7872  -0.5460
2479        0.8834   0.0032  -0.4686
2480      -52.9020  18.6313  -0.6709)
2481    #(  0.4155   0.9025  -0.1137  ; P-O3*-60-tfo
2482        0.9040  -0.4236  -0.0582
2483       -0.1007  -0.0786  -0.9918
2484       -7.6624 -25.2080  49.5181)
2485    #( 31.3810   0.1400  47.5810) ; P
2486    #( 29.9860   0.6630  47.6290) ; O1P
2487    #( 31.7210  -0.6460  48.8090) ; O2P
2488    #( 32.4940   1.2540  47.2740) ; O5*
2489    #( 32.5924   2.3488  48.2255) ; C5*
2490    #( 33.3674   2.1246  48.9584) ; H5*
2491    #( 31.5994   2.5917  48.6037) ; H5**
2492    #( 33.0722   3.5577  47.4258) ; C4*
2493    #( 34.0333   3.3761  46.9447) ; H4*
2494    #( 32.0890   3.8338  46.4332) ; O4*
2495    #( 31.6377   5.1787  46.5914) ; C1*
2496    #( 32.2499   5.8016  45.9392) ; H1*
2497    #( 31.9167   5.5319  48.0305) ; C2*
2498    #( 31.1507   5.0820  48.6621) ; H2**
2499    #( 32.0865   6.8890  48.3114) ; O2*
2500    #( 31.5363   7.4819  47.7942) ; H2*
2501    #( 33.2398   4.8224  48.2563) ; C3*
2502    #( 33.3166   4.5570  49.3108) ; H3*
2503    #( 34.2528   5.7056  47.7476) ; O3*
2504    #( 28.2782   6.3049  42.9364) ; N1
2505    #( 30.4001   5.8547  43.9258) ; N3
2506    #( 29.6195   6.1568  42.8913) ; C2
2507    #( 29.7005   5.7006  45.0649) ; C4
2508    #( 28.3383   5.8221  45.2343) ; C5
2509    #( 27.5519   6.1461  44.0958) ; C6
2510    #( 30.1838   6.3385  41.6890) ; N2
2511    #( 27.9936   5.5926  46.5651) ; N7
2512    #( 30.2046   5.3825  46.3136) ; N9
2513    #( 29.1371   5.3398  47.1506) ; C8
2514    #( 26.3361   6.3024  44.0495) ; O6
2515    #( 27.8122   6.5394  42.0833) ; H1
2516    #( 29.7125   6.5595  40.8235) ; H21
2517    #( 31.1859   6.2231  41.6389) ; H22
2518    #( 28.9406   5.1504  48.2059) ; H8
2519  ))
2520
2521(define rGs
2522  (list rG01 rG02 rG03 rG04 rG05 rG06 rG07 rG08 rG09 rG10))
2523
2524(define rU
2525  (make-constant-rU
2526    #( -0.0359  -0.8071   0.5894  ; dgf-base-tfo
2527       -0.2669   0.5761   0.7726
2528       -0.9631  -0.1296  -0.2361
2529        0.1584   8.3434   0.5434)
2530    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
2531        0.0649   0.4366  -0.8973
2532        0.5521  -0.7648  -0.3322
2533        1.6833   6.8060  -7.0011)
2534    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
2535       -0.4628  -0.6450  -0.6082
2536        0.8168  -0.0436  -0.5753
2537       -6.8179  -3.9778  -5.9887)
2538    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
2539        0.8103  -0.5790   0.0906
2540       -0.0255  -0.1894  -0.9816
2541        6.1203  -7.1051   3.1984)
2542    #(  2.6760  -8.4960   3.2880) ; P
2543    #(  1.4950  -7.6230   3.4770) ; O1P
2544    #(  2.9490  -9.4640   4.3740) ; O2P
2545    #(  3.9730  -7.5950   3.0340) ; O5*
2546    #(  5.2430  -8.2420   2.8260) ; C5*
2547    #(  5.1974  -8.8497   1.9223) ; H5*
2548    #(  5.5548  -8.7348   3.7469) ; H5**
2549    #(  6.3140  -7.2060   2.5510) ; C4*
2550    #(  7.2954  -7.6762   2.4898) ; H4*
2551    #(  6.0140  -6.5420   1.2890) ; O4*
2552    #(  6.4190  -5.1840   1.3620) ; C1*
2553    #(  7.1608  -5.0495   0.5747) ; H1*
2554    #(  7.0760  -4.9560   2.7270) ; C2*
2555    #(  6.7770  -3.9803   3.1099) ; H2**
2556    #(  8.4500  -5.1930   2.5810) ; O2*
2557    #(  8.8309  -4.8755   1.7590) ; H2*
2558    #(  6.4060  -6.0590   3.5580) ; C3*
2559    #(  5.4021  -5.7313   3.8281) ; H3*
2560    #(  7.1570  -6.4240   4.7070) ; O3*
2561    #(  5.2170  -4.3260   1.1690) ; N1
2562    #(  4.2960  -2.2560   0.6290) ; N3
2563    #(  5.4330  -3.0200   0.7990) ; C2
2564    #(  2.9930  -2.6780   0.7940) ; C4
2565    #(  2.8670  -4.0630   1.1830) ; C5
2566    #(  3.9570  -4.8300   1.3550) ; C6
2567    #(  6.5470  -2.5560   0.6290) ; O2
2568    #(  2.0540  -1.9000   0.6130) ; O4
2569    #(  4.4300  -1.3020   0.3600) ; H3
2570    #(  1.9590  -4.4570   1.3250) ; H5
2571    #(  3.8460  -5.7860   1.6240) ; H6
2572  ))
2573
2574(define rU01
2575  (make-constant-rU
2576    #( -0.0137  -0.8012   0.5983  ; dgf-base-tfo
2577       -0.2523   0.5817   0.7733
2578       -0.9675  -0.1404  -0.2101
2579        0.2031   8.3874   0.4228)
2580    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
2581        0.0649   0.4366  -0.8973
2582        0.5521  -0.7648  -0.3322
2583        1.6833   6.8060  -7.0011)
2584    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
2585       -0.4628  -0.6450  -0.6082
2586        0.8168  -0.0436  -0.5753
2587       -6.8179  -3.9778  -5.9887)
2588    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
2589        0.8103  -0.5790   0.0906
2590       -0.0255  -0.1894  -0.9816
2591        6.1203  -7.1051   3.1984)
2592    #(  2.6760  -8.4960   3.2880) ; P
2593    #(  1.4950  -7.6230   3.4770) ; O1P
2594    #(  2.9490  -9.4640   4.3740) ; O2P
2595    #(  3.9730  -7.5950   3.0340) ; O5*
2596    #(  5.2416  -8.2422   2.8181) ; C5*
2597    #(  5.2050  -8.8128   1.8901) ; H5*
2598    #(  5.5368  -8.7738   3.7227) ; H5**
2599    #(  6.3232  -7.2037   2.6002) ; C4*
2600    #(  7.3048  -7.6757   2.5577) ; H4*
2601    #(  6.0635  -6.5092   1.3456) ; O4*
2602    #(  6.4697  -5.1547   1.4629) ; C1*
2603    #(  7.2354  -5.0043   0.7018) ; H1*
2604    #(  7.0856  -4.9610   2.8521) ; C2*
2605    #(  6.7777  -3.9935   3.2487) ; H2**
2606    #(  8.4627  -5.1992   2.7423) ; O2*
2607    #(  8.8693  -4.8638   1.9399) ; H2*
2608    #(  6.3877  -6.0809   3.6362) ; C3*
2609    #(  5.3770  -5.7562   3.8834) ; H3*
2610    #(  7.1024  -6.4754   4.7985) ; O3*
2611    #(  5.2764  -4.2883   1.2538) ; N1
2612    #(  4.3777  -2.2062   0.7229) ; N3
2613    #(  5.5069  -2.9779   0.9088) ; C2
2614    #(  3.0693  -2.6246   0.8500) ; C4
2615    #(  2.9279  -4.0146   1.2149) ; C5
2616    #(  4.0101  -4.7892   1.4017) ; C6
2617    #(  6.6267  -2.5166   0.7728) ; O2
2618    #(  2.1383  -1.8396   0.6581) ; O4
2619    #(  4.5223  -1.2489   0.4716) ; H3
2620    #(  2.0151  -4.4065   1.3290) ; H5
2621    #(  3.8886  -5.7486   1.6535) ; H6
2622  ))
2623
2624(define rU02
2625  (make-constant-rU
2626    #(  0.5141   0.0246   0.8574  ; dgf-base-tfo
2627       -0.5547  -0.7529   0.3542
2628        0.6542  -0.6577  -0.3734
2629       -9.1111  -3.4598  -3.2939)
2630    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
2631        0.0649   0.4366  -0.8973
2632        0.5521  -0.7648  -0.3322
2633        1.6833   6.8060  -7.0011)
2634    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
2635       -0.4628  -0.6450  -0.6082
2636        0.8168  -0.0436  -0.5753
2637       -6.8179  -3.9778  -5.9887)
2638    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
2639        0.8103  -0.5790   0.0906
2640       -0.0255  -0.1894  -0.9816
2641        6.1203  -7.1051   3.1984)
2642    #(  2.6760  -8.4960   3.2880) ; P
2643    #(  1.4950  -7.6230   3.4770) ; O1P
2644    #(  2.9490  -9.4640   4.3740) ; O2P
2645    #(  3.9730  -7.5950   3.0340) ; O5*
2646    #(  4.3825  -6.6585   4.0489) ; C5*
2647    #(  4.6841  -7.2019   4.9443) ; H5*
2648    #(  3.6189  -5.8889   4.1625) ; H5**
2649    #(  5.6255  -5.9175   3.5998) ; C4*
2650    #(  5.8732  -5.1228   4.3034) ; H4*
2651    #(  6.7337  -6.8605   3.5222) ; O4*
2652    #(  7.5932  -6.4923   2.4548) ; C1*
2653    #(  8.5661  -6.2983   2.9064) ; H1*
2654    #(  7.0527  -5.2012   1.8322) ; C2*
2655    #(  7.1627  -5.2525   0.7490) ; H2**
2656    #(  7.6666  -4.1249   2.4880) ; O2*
2657    #(  8.5944  -4.2543   2.6981) ; H2*
2658    #(  5.5661  -5.3029   2.2009) ; C3*
2659    #(  5.0841  -6.0018   1.5172) ; H3*
2660    #(  4.9062  -4.0452   2.2042) ; O3*
2661    #(  7.6298  -7.6136   1.4752) ; N1
2662    #(  8.6945  -8.7046  -0.2857) ; N3
2663    #(  8.6943  -7.6514   0.6066) ; C2
2664    #(  7.7426  -9.6987  -0.3801) ; C4
2665    #(  6.6642  -9.5742   0.5722) ; C5
2666    #(  6.6391  -8.5592   1.4526) ; C6
2667    #(  9.5840  -6.8186   0.6136) ; O2
2668    #(  7.8505 -10.5925  -1.2223) ; O4
2669    #(  9.4601  -8.7514  -0.9277) ; H3
2670    #(  5.9281 -10.2509   0.5782) ; H5
2671    #(  5.8831  -8.4931   2.1028) ; H6
2672  ))
2673
2674(define rU03
2675  (make-constant-rU
2676    #( -0.4993   0.0476   0.8651  ; dgf-base-tfo
2677        0.8078  -0.3353   0.4847
2678        0.3132   0.9409   0.1290
2679        6.2989  -5.2303  -3.8577)
2680    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
2681        0.0649   0.4366  -0.8973
2682        0.5521  -0.7648  -0.3322
2683        1.6833   6.8060  -7.0011)
2684    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
2685       -0.4628  -0.6450  -0.6082
2686        0.8168  -0.0436  -0.5753
2687       -6.8179  -3.9778  -5.9887)
2688    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
2689        0.8103  -0.5790   0.0906
2690       -0.0255  -0.1894  -0.9816
2691        6.1203  -7.1051   3.1984)
2692    #(  2.6760  -8.4960   3.2880) ; P
2693    #(  1.4950  -7.6230   3.4770) ; O1P
2694    #(  2.9490  -9.4640   4.3740) ; O2P
2695    #(  3.9730  -7.5950   3.0340) ; O5*
2696    #(  3.9938  -6.7042   1.9023) ; C5*
2697    #(  3.2332  -5.9343   2.0319) ; H5*
2698    #(  3.9666  -7.2863   0.9812) ; H5**
2699    #(  5.3098  -5.9546   1.8564) ; C4*
2700    #(  5.3863  -5.3702   0.9395) ; H4*
2701    #(  5.3851  -5.0642   3.0076) ; O4*
2702    #(  6.7315  -4.9724   3.4462) ; C1*
2703    #(  7.0033  -3.9202   3.3619) ; H1*
2704    #(  7.5997  -5.8018   2.4948) ; C2*
2705    #(  8.3627  -6.3254   3.0707) ; H2**
2706    #(  8.0410  -4.9501   1.4724) ; O2*
2707    #(  8.2781  -4.0644   1.7570) ; H2*
2708    #(  6.5701  -6.8129   1.9714) ; C3*
2709    #(  6.4186  -7.5809   2.7299) ; H3*
2710    #(  6.9357  -7.3841   0.7235) ; O3*
2711    #(  6.8024  -5.4718   4.8475) ; N1
2712    #(  7.9218  -5.5700   6.8877) ; N3
2713    #(  7.8908  -5.0886   5.5944) ; C2
2714    #(  6.9789  -6.3827   7.4823) ; C4
2715    #(  5.8742  -6.7319   6.6202) ; C5
2716    #(  5.8182  -6.2769   5.3570) ; C6
2717    #(  8.7747  -4.3728   5.1568) ; O2
2718    #(  7.1154  -6.7509   8.6509) ; O4
2719    #(  8.7055  -5.3037   7.4491) ; H3
2720    #(  5.1416  -7.3178   6.9665) ; H5
2721    #(  5.0441  -6.5310   4.7784) ; H6
2722  ))
2723
2724(define rU04
2725  (make-constant-rU
2726    #( -0.5669  -0.8012   0.1918  ; dgf-base-tfo
2727       -0.8129   0.5817   0.0273
2728       -0.1334  -0.1404  -0.9811
2729       -0.3279   8.3874   0.3355)
2730    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
2731        0.0649   0.4366  -0.8973
2732        0.5521  -0.7648  -0.3322
2733        1.6833   6.8060  -7.0011)
2734    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
2735       -0.4628  -0.6450  -0.6082
2736        0.8168  -0.0436  -0.5753
2737       -6.8179  -3.9778  -5.9887)
2738    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
2739        0.8103  -0.5790   0.0906
2740       -0.0255  -0.1894  -0.9816
2741        6.1203  -7.1051   3.1984)
2742    #(  2.6760  -8.4960   3.2880) ; P
2743    #(  1.4950  -7.6230   3.4770) ; O1P
2744    #(  2.9490  -9.4640   4.3740) ; O2P
2745    #(  3.9730  -7.5950   3.0340) ; O5*
2746    #(  5.2416  -8.2422   2.8181) ; C5*
2747    #(  5.2050  -8.8128   1.8901) ; H5*
2748    #(  5.5368  -8.7738   3.7227) ; H5**
2749    #(  6.3232  -7.2037   2.6002) ; C4*
2750    #(  7.3048  -7.6757   2.5577) ; H4*
2751    #(  6.0635  -6.5092   1.3456) ; O4*
2752    #(  6.4697  -5.1547   1.4629) ; C1*
2753    #(  7.2354  -5.0043   0.7018) ; H1*
2754    #(  7.0856  -4.9610   2.8521) ; C2*
2755    #(  6.7777  -3.9935   3.2487) ; H2**
2756    #(  8.4627  -5.1992   2.7423) ; O2*
2757    #(  8.8693  -4.8638   1.9399) ; H2*
2758    #(  6.3877  -6.0809   3.6362) ; C3*
2759    #(  5.3770  -5.7562   3.8834) ; H3*
2760    #(  7.1024  -6.4754   4.7985) ; O3*
2761    #(  5.2764  -4.2883   1.2538) ; N1
2762    #(  3.8961  -3.0896  -0.1893) ; N3
2763    #(  5.0095  -3.8907  -0.0346) ; C2
2764    #(  3.0480  -2.6632   0.8116) ; C4
2765    #(  3.4093  -3.1310   2.1292) ; C5
2766    #(  4.4878  -3.9124   2.3088) ; C6
2767    #(  5.7005  -4.2164  -0.9842) ; O2
2768    #(  2.0800  -1.9458   0.5503) ; O4
2769    #(  3.6834  -2.7882  -1.1190) ; H3
2770    #(  2.8508  -2.8721   2.9172) ; H5
2771    #(  4.7188  -4.2247   3.2295) ; H6
2772  ))
2773
2774(define rU05
2775  (make-constant-rU
2776    #( -0.6298   0.0246   0.7763  ; dgf-base-tfo
2777       -0.5226  -0.7529  -0.4001
2778        0.5746  -0.6577   0.4870
2779       -0.0208  -3.4598  -9.6882)
2780    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
2781        0.0649   0.4366  -0.8973
2782        0.5521  -0.7648  -0.3322
2783        1.6833   6.8060  -7.0011)
2784    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
2785       -0.4628  -0.6450  -0.6082
2786        0.8168  -0.0436  -0.5753
2787       -6.8179  -3.9778  -5.9887)
2788    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
2789        0.8103  -0.5790   0.0906
2790       -0.0255  -0.1894  -0.9816
2791        6.1203  -7.1051   3.1984)
2792    #(  2.6760  -8.4960   3.2880) ; P
2793    #(  1.4950  -7.6230   3.4770) ; O1P
2794    #(  2.9490  -9.4640   4.3740) ; O2P
2795    #(  3.9730  -7.5950   3.0340) ; O5*
2796    #(  4.3825  -6.6585   4.0489) ; C5*
2797    #(  4.6841  -7.2019   4.9443) ; H5*
2798    #(  3.6189  -5.8889   4.1625) ; H5**
2799    #(  5.6255  -5.9175   3.5998) ; C4*
2800    #(  5.8732  -5.1228   4.3034) ; H4*
2801    #(  6.7337  -6.8605   3.5222) ; O4*
2802    #(  7.5932  -6.4923   2.4548) ; C1*
2803    #(  8.5661  -6.2983   2.9064) ; H1*
2804    #(  7.0527  -5.2012   1.8322) ; C2*
2805    #(  7.1627  -5.2525   0.7490) ; H2**
2806    #(  7.6666  -4.1249   2.4880) ; O2*
2807    #(  8.5944  -4.2543   2.6981) ; H2*
2808    #(  5.5661  -5.3029   2.2009) ; C3*
2809    #(  5.0841  -6.0018   1.5172) ; H3*
2810    #(  4.9062  -4.0452   2.2042) ; O3*
2811    #(  7.6298  -7.6136   1.4752) ; N1
2812    #(  8.5977  -9.5977   0.7329) ; N3
2813    #(  8.5951  -8.5745   1.6594) ; C2
2814    #(  7.7372  -9.7371  -0.3364) ; C4
2815    #(  6.7596  -8.6801  -0.4476) ; C5
2816    #(  6.7338  -7.6721   0.4408) ; C6
2817    #(  9.3993  -8.5377   2.5743) ; O2
2818    #(  7.8374 -10.6990  -1.1008) ; O4
2819    #(  9.2924 -10.3081   0.8477) ; H3
2820    #(  6.0932  -8.6982  -1.1929) ; H5
2821    #(  6.0481  -6.9515   0.3446) ; H6
2822  ))
2823
2824(define rU06
2825  (make-constant-rU
2826    #( -0.9837   0.0476  -0.1733  ; dgf-base-tfo
2827       -0.1792  -0.3353   0.9249
2828       -0.0141   0.9409   0.3384
2829        5.7793  -5.2303   4.5997)
2830    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
2831        0.0649   0.4366  -0.8973
2832        0.5521  -0.7648  -0.3322
2833        1.6833   6.8060  -7.0011)
2834    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
2835       -0.4628  -0.6450  -0.6082
2836        0.8168  -0.0436  -0.5753
2837       -6.8179  -3.9778  -5.9887)
2838    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
2839        0.8103  -0.5790   0.0906
2840       -0.0255  -0.1894  -0.9816
2841        6.1203  -7.1051   3.1984)
2842    #(  2.6760  -8.4960   3.2880) ; P
2843    #(  1.4950  -7.6230   3.4770) ; O1P
2844    #(  2.9490  -9.4640   4.3740) ; O2P
2845    #(  3.9730  -7.5950   3.0340) ; O5*
2846    #(  3.9938  -6.7042   1.9023) ; C5*
2847    #(  3.2332  -5.9343   2.0319) ; H5*
2848    #(  3.9666  -7.2863   0.9812) ; H5**
2849    #(  5.3098  -5.9546   1.8564) ; C4*
2850    #(  5.3863  -5.3702   0.9395) ; H4*
2851    #(  5.3851  -5.0642   3.0076) ; O4*
2852    #(  6.7315  -4.9724   3.4462) ; C1*
2853    #(  7.0033  -3.9202   3.3619) ; H1*
2854    #(  7.5997  -5.8018   2.4948) ; C2*
2855    #(  8.3627  -6.3254   3.0707) ; H2**
2856    #(  8.0410  -4.9501   1.4724) ; O2*
2857    #(  8.2781  -4.0644   1.7570) ; H2*
2858    #(  6.5701  -6.8129   1.9714) ; C3*
2859    #(  6.4186  -7.5809   2.7299) ; H3*
2860    #(  6.9357  -7.3841   0.7235) ; O3*
2861    #(  6.8024  -5.4718   4.8475) ; N1
2862    #(  6.6920  -5.0495   7.1354) ; N3
2863    #(  6.6201  -4.5500   5.8506) ; C2
2864    #(  6.9254  -6.3614   7.4926) ; C4
2865    #(  7.1046  -7.2543   6.3718) ; C5
2866    #(  7.0391  -6.7951   5.1106) ; C6
2867    #(  6.4083  -3.3696   5.6340) ; O2
2868    #(  6.9679  -6.6901   8.6800) ; O4
2869    #(  6.5626  -4.3957   7.8812) ; H3
2870    #(  7.2781  -8.2254   6.5350) ; H5
2871    #(  7.1657  -7.4312   4.3503) ; H6
2872  ))
2873
2874(define rU07
2875  (make-constant-rU
2876    #( -0.9434   0.3172   0.0971  ; dgf-base-tfo
2877        0.2294   0.4125   0.8816
2878        0.2396   0.8539  -0.4619
2879        8.3625 -52.7147   1.3745)
2880    #(  0.2765  -0.1121  -0.9545  ; P-O3*-275-tfo
2881       -0.8297   0.4733  -0.2959
2882        0.4850   0.8737   0.0379
2883      -14.7774 -45.2464  21.9088)
2884    #(  0.1063  -0.6334  -0.7665  ; P-O3*-180-tfo
2885       -0.5932  -0.6591   0.4624
2886       -0.7980   0.4055  -0.4458
2887       43.7634   4.3296  28.4890)
2888    #(  0.7136  -0.5032  -0.4873  ; P-O3*-60-tfo
2889        0.6803   0.3317   0.6536
2890       -0.1673  -0.7979   0.5791
2891      -17.1858  41.4390 -27.0751)
2892    #( 21.3880  15.0780  45.5770) ; P
2893    #( 21.9980  14.5500  46.8210) ; O1P
2894    #( 21.1450  14.0270  44.5420) ; O2P
2895    #( 22.1250  16.3600  44.9460) ; O5*
2896    #( 21.5037  16.8594  43.7323) ; C5*
2897    #( 20.8147  17.6663  43.9823) ; H5*
2898    #( 21.1086  16.0230  43.1557) ; H5**
2899    #( 22.5654  17.4874  42.8616) ; C4*
2900    #( 22.1584  17.7243  41.8785) ; H4*
2901    #( 23.0557  18.6826  43.4751) ; O4*
2902    #( 24.4788  18.6151  43.6455) ; C1*
2903    #( 24.9355  19.0840  42.7739) ; H1*
2904    #( 24.7958  17.1427  43.6474) ; C2*
2905    #( 24.5652  16.7400  44.6336) ; H2**
2906    #( 26.1041  16.8773  43.2455) ; O2*
2907    #( 26.7516  17.5328  43.5149) ; H2*
2908    #( 23.8109  16.5979  42.6377) ; C3*
2909    #( 23.5756  15.5686  42.9084) ; H3*
2910    #( 24.2890  16.7447  41.2729) ; O3*
2911    #( 24.9420  19.2174  44.8923) ; N1
2912    #( 25.2655  20.5636  44.8883) ; N3
2913    #( 25.1663  21.2219  43.8561) ; C2
2914    #( 25.6911  21.1219  46.0494) ; C4
2915    #( 25.8051  20.4068  47.2048) ; C5
2916    #( 26.2093  20.9962  48.2534) ; C6
2917    #( 25.4692  19.0221  47.2053) ; O2
2918    #( 25.0502  18.4827  46.0370) ; O4
2919    #( 25.9599  22.1772  46.0966) ; H3
2920    #( 25.5545  18.4409  48.1234) ; H5
2921    #( 24.7854  17.4265  45.9883) ; H6
2922  ))
2923
2924(define rU08
2925  (make-constant-rU
2926    #( -0.0080  -0.7928   0.6094  ; dgf-base-tfo
2927       -0.7512   0.4071   0.5197
2928       -0.6601  -0.4536  -0.5988
2929       44.1482  30.7036   2.1088)
2930    #(  0.2765  -0.1121  -0.9545  ; P-O3*-275-tfo
2931       -0.8297   0.4733  -0.2959
2932        0.4850   0.8737   0.0379
2933      -14.7774 -45.2464  21.9088)
2934    #(  0.1063  -0.6334  -0.7665  ; P-O3*-180-tfo
2935       -0.5932  -0.6591   0.4624
2936       -0.7980   0.4055  -0.4458
2937       43.7634   4.3296  28.4890)
2938    #(  0.7136  -0.5032  -0.4873  ; P-O3*-60-tfo
2939        0.6803   0.3317   0.6536
2940       -0.1673  -0.7979   0.5791
2941      -17.1858  41.4390 -27.0751)
2942    #( 21.3880  15.0780  45.5770) ; P
2943    #( 21.9980  14.5500  46.8210) ; O1P
2944    #( 21.1450  14.0270  44.5420) ; O2P
2945    #( 22.1250  16.3600  44.9460) ; O5*
2946    #( 23.5096  16.1227  44.5783) ; C5*
2947    #( 23.5649  15.8588  43.5222) ; H5*
2948    #( 23.9621  15.4341  45.2919) ; H5**
2949    #( 24.2805  17.4138  44.7151) ; C4*
2950    #( 25.3492  17.2309  44.6030) ; H4*
2951    #( 23.8497  18.3471  43.7208) ; O4*
2952    #( 23.4090  19.5681  44.3321) ; C1*
2953    #( 24.2595  20.2496  44.3524) ; H1*
2954    #( 23.0418  19.1813  45.7407) ; C2*
2955    #( 22.0532  18.7224  45.7273) ; H2**
2956    #( 23.1307  20.2521  46.6291) ; O2*
2957    #( 22.8888  21.1051  46.2611) ; H2*
2958    #( 24.0799  18.1326  46.0700) ; C3*
2959    #( 23.6490  17.4370  46.7900) ; H3*
2960    #( 25.3329  18.7227  46.5109) ; O3*
2961    #( 22.2515  20.1624  43.6698) ; N1
2962    #( 22.4760  21.0609  42.6406) ; N3
2963    #( 23.6229  21.3462  42.3061) ; C2
2964    #( 21.3986  21.6081  42.0236) ; C4
2965    #( 20.1189  21.3012  42.3804) ; C5
2966    #( 19.1599  21.8516  41.7578) ; C6
2967    #( 19.8919  20.3745  43.4387) ; O2
2968    #( 20.9790  19.8423  44.0440) ; O4
2969    #( 21.5235  22.3222  41.2097) ; H3
2970    #( 18.8732  20.1200  43.7312) ; H5
2971    #( 20.8545  19.1313  44.8608) ; H6
2972  ))
2973
2974(define rU09
2975  (make-constant-rU
2976    #( -0.0317   0.1374   0.9900  ; dgf-base-tfo
2977       -0.3422  -0.9321   0.1184
2978        0.9391  -0.3351   0.0765
2979      -32.1929  25.8198 -28.5088)
2980    #(  0.2765  -0.1121  -0.9545  ; P-O3*-275-tfo
2981       -0.8297   0.4733  -0.2959
2982        0.4850   0.8737   0.0379
2983      -14.7774 -45.2464  21.9088)
2984    #(  0.1063  -0.6334  -0.7665  ; P-O3*-180-tfo
2985       -0.5932  -0.6591   0.4624
2986       -0.7980   0.4055  -0.4458
2987       43.7634   4.3296  28.4890)
2988    #(  0.7136  -0.5032  -0.4873  ; P-O3*-60-tfo
2989        0.6803   0.3317   0.6536
2990       -0.1673  -0.7979   0.5791
2991      -17.1858  41.4390 -27.0751)
2992    #( 21.3880  15.0780  45.5770) ; P
2993    #( 21.9980  14.5500  46.8210) ; O1P
2994    #( 21.1450  14.0270  44.5420) ; O2P
2995    #( 22.1250  16.3600  44.9460) ; O5*
2996    #( 21.5037  16.8594  43.7323) ; C5*
2997    #( 20.8147  17.6663  43.9823) ; H5*
2998    #( 21.1086  16.0230  43.1557) ; H5**
2999    #( 22.5654  17.4874  42.8616) ; C4*
3000    #( 23.0565  18.3036  43.3915) ; H4*
3001    #( 23.5375  16.5054  42.4925) ; O4*
3002    #( 23.6574  16.4257  41.0649) ; C1*
3003    #( 24.4701  17.0882  40.7671) ; H1*
3004    #( 22.3525  16.9643  40.5396) ; C2*
3005    #( 21.5993  16.1799  40.6133) ; H2**
3006    #( 22.4693  17.4849  39.2515) ; O2*
3007    #( 23.0899  17.0235  38.6827) ; H2*
3008    #( 22.0341  18.0633  41.5279) ; C3*
3009    #( 20.9509  18.1709  41.5846) ; H3*
3010    #( 22.7249  19.3020  41.2100) ; O3*
3011    #( 23.8580  15.0648  40.5757) ; N1
3012    #( 25.1556  14.5982  40.4523) ; N3
3013    #( 26.1047  15.3210  40.7448) ; C2
3014    #( 25.3391  13.3315  40.0020) ; C4
3015    #( 24.2974  12.5148  39.6749) ; C5
3016    #( 24.5450  11.3410  39.2610) ; C6
3017    #( 22.9633  12.9979  39.8053) ; O2
3018    #( 22.8009  14.2648  40.2524) ; O4
3019    #( 26.3414  12.9194  39.8855) ; H3
3020    #( 22.1227  12.3533  39.5486) ; H5
3021    #( 21.7989  14.6788  40.3650) ; H6
3022  ))
3023
3024(define rU10
3025  (make-constant-rU
3026    #( -0.9674   0.1021  -0.2318  ; dgf-base-tfo
3027       -0.2514  -0.2766   0.9275
3028        0.0306   0.9555   0.2933
3029       27.8571 -42.1305 -24.4563)
3030    #(  0.2765  -0.1121  -0.9545  ; P-O3*-275-tfo
3031       -0.8297   0.4733  -0.2959
3032        0.4850   0.8737   0.0379
3033      -14.7774 -45.2464  21.9088)
3034    #(  0.1063  -0.6334  -0.7665  ; P-O3*-180-tfo
3035       -0.5932  -0.6591   0.4624
3036       -0.7980   0.4055  -0.4458
3037       43.7634   4.3296  28.4890)
3038    #(  0.7136  -0.5032  -0.4873  ; P-O3*-60-tfo
3039        0.6803   0.3317   0.6536
3040       -0.1673  -0.7979   0.5791
3041      -17.1858  41.4390 -27.0751)
3042    #( 21.3880  15.0780  45.5770) ; P
3043    #( 21.9980  14.5500  46.8210) ; O1P
3044    #( 21.1450  14.0270  44.5420) ; O2P
3045    #( 22.1250  16.3600  44.9460) ; O5*
3046    #( 23.5096  16.1227  44.5783) ; C5*
3047    #( 23.5649  15.8588  43.5222) ; H5*
3048    #( 23.9621  15.4341  45.2919) ; H5**
3049    #( 24.2805  17.4138  44.7151) ; C4*
3050    #( 23.8509  18.1819  44.0720) ; H4*
3051    #( 24.2506  17.8583  46.0741) ; O4*
3052    #( 25.5830  18.0320  46.5775) ; C1*
3053    #( 25.8569  19.0761  46.4256) ; H1*
3054    #( 26.4410  17.1555  45.7033) ; C2*
3055    #( 26.3459  16.1253  46.0462) ; H2**
3056    #( 27.7649  17.5888  45.6478) ; O2*
3057    #( 28.1004  17.9719  46.4616) ; H2*
3058    #( 25.7796  17.2997  44.3513) ; C3*
3059    #( 25.9478  16.3824  43.7871) ; H3*
3060    #( 26.2154  18.4984  43.6541) ; O3*
3061    #( 25.7321  17.6281  47.9726) ; N1
3062    #( 25.5136  18.5779  48.9560) ; N3
3063    #( 25.2079  19.7276  48.6503) ; C2
3064    #( 25.6482  18.1987  50.2518) ; C4
3065    #( 25.9847  16.9266  50.6092) ; C5
3066    #( 26.0918  16.6439  51.8416) ; C6
3067    #( 26.2067  15.9515  49.5943) ; O2
3068    #( 26.0713  16.3497  48.3080) ; O4
3069    #( 25.4890  18.9105  51.0618) ; H3
3070    #( 26.4742  14.9310  49.8682) ; H5
3071    #( 26.2346  15.6394  47.4975) ; H6
3072  ))
3073
3074(define rUs
3075  (list rU01 rU02 rU03 rU04 rU05 rU06 rU07 rU08 rU09 rU10))
3076
3077(define rG*
3078  (make-constant-rG
3079    #( -0.2067  -0.0264   0.9780  ; dgf-base-tfo
3080        0.9770  -0.0586   0.2049
3081        0.0519   0.9979   0.0379
3082        1.0331 -46.8078 -36.4742)
3083    #( -0.8644  -0.4956  -0.0851  ; P-O3*-275-tfo
3084       -0.0427   0.2409  -0.9696
3085        0.5010  -0.8345  -0.2294
3086        4.0167  54.5377  12.4779)
3087    #(  0.3706  -0.6167   0.6945  ; P-O3*-180-tfo
3088       -0.2867  -0.7872  -0.5460
3089        0.8834   0.0032  -0.4686
3090      -52.9020  18.6313  -0.6709)
3091    #(  0.4155   0.9025  -0.1137  ; P-O3*-60-tfo
3092        0.9040  -0.4236  -0.0582
3093       -0.1007  -0.0786  -0.9918
3094       -7.6624 -25.2080  49.5181)
3095    #( 31.3810   0.1400  47.5810) ; P
3096    #( 29.9860   0.6630  47.6290) ; O1P
3097    #( 31.7210  -0.6460  48.8090) ; O2P
3098    #( 32.4940   1.2540  47.2740) ; O5*
3099    #( 32.1610   2.2370  46.2560) ; C5*
3100    #( 31.2986   2.8190  46.5812) ; H5*
3101    #( 32.0980   1.7468  45.2845) ; H5**
3102    #( 33.3476   3.1959  46.1947) ; C4*
3103    #( 33.2668   3.8958  45.3630) ; H4*
3104    #( 33.3799   3.9183  47.4216) ; O4*
3105    #( 34.6515   3.7222  48.0398) ; C1*
3106    #( 35.2947   4.5412  47.7180) ; H1*
3107    #( 35.1756   2.4228  47.4827) ; C2*
3108    #( 34.6778   1.5937  47.9856) ; H2**
3109    #( 36.5631   2.2672  47.4798) ; O2*
3110    #( 37.0163   2.6579  48.2305) ; H2*
3111    #( 34.6953   2.5043  46.0448) ; C3*
3112    #( 34.5444   1.4917  45.6706) ; H3*
3113    #( 35.6679   3.3009  45.3487) ; O3*
3114    #( 37.4804   4.0914  52.2559) ; N1
3115    #( 36.9670   4.1312  49.9281) ; N3
3116    #( 37.8045   4.2519  50.9550) ; C2
3117    #( 35.7171   3.8264  50.3222) ; C4
3118    #( 35.2668   3.6420  51.6115) ; C5
3119    #( 36.2037   3.7829  52.6706) ; C6
3120    #( 39.0869   4.5552  50.7092) ; N2
3121    #( 33.9075   3.3338  51.6102) ; N7
3122    #( 34.6126   3.6358  49.5108) ; N9
3123    #( 33.5805   3.3442  50.3425) ; C8
3124    #( 35.9958   3.6512  53.8724) ; O6
3125    #( 38.2106   4.2053  52.9295) ; H1
3126    #( 39.8218   4.6863  51.3896) ; H21
3127    #( 39.3420   4.6857  49.7407) ; H22
3128    #( 32.5194   3.1070  50.2664) ; H8
3129  ))
3130
3131(define rU*
3132  (make-constant-rU
3133    #( -0.0109   0.5907   0.8068  ; dgf-base-tfo
3134        0.2217  -0.7853   0.5780
3135        0.9751   0.1852  -0.1224
3136       -1.4225 -11.0956  -2.5217)
3137    #( -0.8313  -0.4738  -0.2906  ; P-O3*-275-tfo
3138        0.0649   0.4366  -0.8973
3139        0.5521  -0.7648  -0.3322
3140        1.6833   6.8060  -7.0011)
3141    #(  0.3445  -0.7630   0.5470  ; P-O3*-180-tfo
3142       -0.4628  -0.6450  -0.6082
3143        0.8168  -0.0436  -0.5753
3144       -6.8179  -3.9778  -5.9887)
3145    #(  0.5855   0.7931  -0.1682  ; P-O3*-60-tfo
3146        0.8103  -0.5790   0.0906
3147       -0.0255  -0.1894  -0.9816
3148        6.1203  -7.1051   3.1984)
3149    #(  2.6760  -8.4960   3.2880) ; P
3150    #(  1.4950  -7.6230   3.4770) ; O1P
3151    #(  2.9490  -9.4640   4.3740) ; O2P
3152    #(  3.9730  -7.5950   3.0340) ; O5*
3153    #(  5.2430  -8.2420   2.8260) ; C5*
3154    #(  5.1974  -8.8497   1.9223) ; H5*
3155    #(  5.5548  -8.7348   3.7469) ; H5**
3156    #(  6.3140  -7.2060   2.5510) ; C4*
3157    #(  5.8744  -6.2116   2.4731) ; H4*
3158    #(  7.2798  -7.2260   3.6420) ; O4*
3159    #(  8.5733  -6.9410   3.1329) ; C1*
3160    #(  8.9047  -6.0374   3.6446) ; H1*
3161    #(  8.4429  -6.6596   1.6327) ; C2*
3162    #(  9.2880  -7.1071   1.1096) ; H2**
3163    #(  8.2502  -5.2799   1.4754) ; O2*
3164    #(  8.7676  -4.7284   2.0667) ; H2*
3165    #(  7.1642  -7.4416   1.3021) ; C3*
3166    #(  7.4125  -8.5002   1.2260) ; H3*
3167    #(  6.5160  -6.9772   0.1267) ; O3*
3168    #(  9.4531  -8.1107   3.4087) ; N1
3169    #( 11.5931  -9.0015   3.6357) ; N3
3170    #( 10.8101  -7.8950   3.3748) ; C2
3171    #( 11.1439 -10.2744   3.9206) ; C4
3172    #(  9.7056 -10.4026   3.9332) ; C5
3173    #(  8.9192  -9.3419   3.6833) ; C6
3174    #( 11.3013  -6.8063   3.1326) ; O2
3175    #( 11.9431 -11.1876   4.1375) ; O4
3176    #( 12.5840  -8.8673   3.6158) ; H3
3177    #(  9.2891 -11.2898   4.1313) ; H5
3178    #(  7.9263  -9.4537   3.6977) ; H6
3179  ))
3180
3181
3182
3183; -- PARTIAL INSTANTIATIONS ---------------------------------------------------
3184
3185(def-struct #f var id tfo nuc)
3186
3187; Add a single-quote at the start of this line if you want lazy computation
3188(begin
3189
3190(def-macro (mk-var i tfo nuc)
3191  `(make-var ,i ,tfo ,nuc))
3192
3193(def-macro (absolute-pos var p)
3194  `(tfo-apply (var-tfo ,var) ,p))
3195
3196(def-macro (lazy-computation-of expr)
3197  expr)
3198)
3199
3200'; Remove the single-quote from this line if you want lazy computation
3201(begin
3202
3203(def-macro (mk-var i tfo nuc)
3204  `(make-var ,i ,tfo (make-relative-nuc ,tfo ,nuc)))
3205
3206(def-macro (absolute-pos var p)
3207  `(force ,p))
3208
3209(def-macro (lazy-computation-of expr)
3210  `(delay ,expr))
3211)
3212
3213(def-macro (atom-pos atom var)
3214  `(let ((v ,var))
3215     (absolute-pos v (,atom (var-nuc v)))))
3216
3217(define (get-var id lst)
3218  (let ((v (car lst)))
3219    (if (= id (var-id v))
3220      v
3221      (get-var id (cdr lst)))))
3222
3223(define (make-relative-nuc tfo n)
3224  (cond ((rA? n)
3225         (make-rA
3226           (nuc-dgf-base-tfo  n)
3227           (nuc-P-O3*-275-tfo n)
3228           (nuc-P-O3*-180-tfo n)
3229           (nuc-P-O3*-60-tfo  n)
3230           (lazy-computation-of (tfo-apply tfo (nuc-P    n)))
3231           (lazy-computation-of (tfo-apply tfo (nuc-O1P  n)))
3232           (lazy-computation-of (tfo-apply tfo (nuc-O2P  n)))
3233           (lazy-computation-of (tfo-apply tfo (nuc-O5*  n)))
3234           (lazy-computation-of (tfo-apply tfo (nuc-C5*  n)))
3235           (lazy-computation-of (tfo-apply tfo (nuc-H5*  n)))
3236           (lazy-computation-of (tfo-apply tfo (nuc-H5** n)))
3237           (lazy-computation-of (tfo-apply tfo (nuc-C4*  n)))
3238           (lazy-computation-of (tfo-apply tfo (nuc-H4*  n)))
3239           (lazy-computation-of (tfo-apply tfo (nuc-O4*  n)))
3240           (lazy-computation-of (tfo-apply tfo (nuc-C1*  n)))
3241           (lazy-computation-of (tfo-apply tfo (nuc-H1*  n)))
3242           (lazy-computation-of (tfo-apply tfo (nuc-C2*  n)))
3243           (lazy-computation-of (tfo-apply tfo (nuc-H2** n)))
3244           (lazy-computation-of (tfo-apply tfo (nuc-O2*  n)))
3245           (lazy-computation-of (tfo-apply tfo (nuc-H2*  n)))
3246           (lazy-computation-of (tfo-apply tfo (nuc-C3*  n)))
3247           (lazy-computation-of (tfo-apply tfo (nuc-H3*  n)))
3248           (lazy-computation-of (tfo-apply tfo (nuc-O3*  n)))
3249           (lazy-computation-of (tfo-apply tfo (nuc-N1   n)))
3250           (lazy-computation-of (tfo-apply tfo (nuc-N3   n)))
3251           (lazy-computation-of (tfo-apply tfo (nuc-C2   n)))
3252           (lazy-computation-of (tfo-apply tfo (nuc-C4   n)))
3253           (lazy-computation-of (tfo-apply tfo (nuc-C5   n)))
3254           (lazy-computation-of (tfo-apply tfo (nuc-C6   n)))
3255           (lazy-computation-of (tfo-apply tfo (rA-N6    n)))
3256           (lazy-computation-of (tfo-apply tfo (rA-N7    n)))
3257           (lazy-computation-of (tfo-apply tfo (rA-N9    n)))
3258           (lazy-computation-of (tfo-apply tfo (rA-C8    n)))
3259           (lazy-computation-of (tfo-apply tfo (rA-H2    n)))
3260           (lazy-computation-of (tfo-apply tfo (rA-H61   n)))
3261           (lazy-computation-of (tfo-apply tfo (rA-H62   n)))
3262           (lazy-computation-of (tfo-apply tfo (rA-H8    n)))))
3263        ((rC? n)
3264         (make-rC
3265           (nuc-dgf-base-tfo  n)
3266           (nuc-P-O3*-275-tfo n)
3267           (nuc-P-O3*-180-tfo n)
3268           (nuc-P-O3*-60-tfo  n)
3269           (lazy-computation-of (tfo-apply tfo (nuc-P    n)))
3270           (lazy-computation-of (tfo-apply tfo (nuc-O1P  n)))
3271           (lazy-computation-of (tfo-apply tfo (nuc-O2P  n)))
3272           (lazy-computation-of (tfo-apply tfo (nuc-O5*  n)))
3273           (lazy-computation-of (tfo-apply tfo (nuc-C5*  n)))
3274           (lazy-computation-of (tfo-apply tfo (nuc-H5*  n)))
3275           (lazy-computation-of (tfo-apply tfo (nuc-H5** n)))
3276           (lazy-computation-of (tfo-apply tfo (nuc-C4*  n)))
3277           (lazy-computation-of (tfo-apply tfo (nuc-H4*  n)))
3278           (lazy-computation-of (tfo-apply tfo (nuc-O4*  n)))
3279           (lazy-computation-of (tfo-apply tfo (nuc-C1*  n)))
3280           (lazy-computation-of (tfo-apply tfo (nuc-H1*  n)))
3281           (lazy-computation-of (tfo-apply tfo (nuc-C2*  n)))
3282           (lazy-computation-of (tfo-apply tfo (nuc-H2** n)))
3283           (lazy-computation-of (tfo-apply tfo (nuc-O2*  n)))
3284           (lazy-computation-of (tfo-apply tfo (nuc-H2*  n)))
3285           (lazy-computation-of (tfo-apply tfo (nuc-C3*  n)))
3286           (lazy-computation-of (tfo-apply tfo (nuc-H3*  n)))
3287           (lazy-computation-of (tfo-apply tfo (nuc-O3*  n)))
3288           (lazy-computation-of (tfo-apply tfo (nuc-N1   n)))
3289           (lazy-computation-of (tfo-apply tfo (nuc-N3   n)))
3290           (lazy-computation-of (tfo-apply tfo (nuc-C2   n)))
3291           (lazy-computation-of (tfo-apply tfo (nuc-C4   n)))
3292           (lazy-computation-of (tfo-apply tfo (nuc-C5   n)))
3293           (lazy-computation-of (tfo-apply tfo (nuc-C6   n)))
3294           (lazy-computation-of (tfo-apply tfo (rC-N4    n)))
3295           (lazy-computation-of (tfo-apply tfo (rC-O2    n)))
3296           (lazy-computation-of (tfo-apply tfo (rC-H41   n)))
3297           (lazy-computation-of (tfo-apply tfo (rC-H42   n)))
3298           (lazy-computation-of (tfo-apply tfo (rC-H5    n)))
3299           (lazy-computation-of (tfo-apply tfo (rC-H6    n)))))
3300        ((rG? n)
3301         (make-rG
3302           (nuc-dgf-base-tfo  n)
3303           (nuc-P-O3*-275-tfo n)
3304           (nuc-P-O3*-180-tfo n)
3305           (nuc-P-O3*-60-tfo  n)
3306           (lazy-computation-of (tfo-apply tfo (nuc-P    n)))
3307           (lazy-computation-of (tfo-apply tfo (nuc-O1P  n)))
3308           (lazy-computation-of (tfo-apply tfo (nuc-O2P  n)))
3309           (lazy-computation-of (tfo-apply tfo (nuc-O5*  n)))
3310           (lazy-computation-of (tfo-apply tfo (nuc-C5*  n)))
3311           (lazy-computation-of (tfo-apply tfo (nuc-H5*  n)))
3312           (lazy-computation-of (tfo-apply tfo (nuc-H5** n)))
3313           (lazy-computation-of (tfo-apply tfo (nuc-C4*  n)))
3314           (lazy-computation-of (tfo-apply tfo (nuc-H4*  n)))
3315           (lazy-computation-of (tfo-apply tfo (nuc-O4*  n)))
3316           (lazy-computation-of (tfo-apply tfo (nuc-C1*  n)))
3317           (lazy-computation-of (tfo-apply tfo (nuc-H1*  n)))
3318           (lazy-computation-of (tfo-apply tfo (nuc-C2*  n)))
3319           (lazy-computation-of (tfo-apply tfo (nuc-H2** n)))
3320           (lazy-computation-of (tfo-apply tfo (nuc-O2*  n)))
3321           (lazy-computation-of (tfo-apply tfo (nuc-H2*  n)))
3322           (lazy-computation-of (tfo-apply tfo (nuc-C3*  n)))
3323           (lazy-computation-of (tfo-apply tfo (nuc-H3*  n)))
3324           (lazy-computation-of (tfo-apply tfo (nuc-O3*  n)))
3325           (lazy-computation-of (tfo-apply tfo (nuc-N1   n)))
3326           (lazy-computation-of (tfo-apply tfo (nuc-N3   n)))
3327           (lazy-computation-of (tfo-apply tfo (nuc-C2   n)))
3328           (lazy-computation-of (tfo-apply tfo (nuc-C4   n)))
3329           (lazy-computation-of (tfo-apply tfo (nuc-C5   n)))
3330           (lazy-computation-of (tfo-apply tfo (nuc-C6   n)))
3331           (lazy-computation-of (tfo-apply tfo (rG-N2    n)))
3332           (lazy-computation-of (tfo-apply tfo (rG-N7    n)))
3333           (lazy-computation-of (tfo-apply tfo (rG-N9    n)))
3334           (lazy-computation-of (tfo-apply tfo (rG-C8    n)))
3335           (lazy-computation-of (tfo-apply tfo (rG-O6    n)))
3336           (lazy-computation-of (tfo-apply tfo (rG-H1    n)))
3337           (lazy-computation-of (tfo-apply tfo (rG-H21   n)))
3338           (lazy-computation-of (tfo-apply tfo (rG-H22   n)))
3339           (lazy-computation-of (tfo-apply tfo (rG-H8    n)))))
3340        (else
3341         (make-rU
3342           (nuc-dgf-base-tfo  n)
3343           (nuc-P-O3*-275-tfo n)
3344           (nuc-P-O3*-180-tfo n)
3345           (nuc-P-O3*-60-tfo  n)
3346           (lazy-computation-of (tfo-apply tfo (nuc-P    n)))
3347           (lazy-computation-of (tfo-apply tfo (nuc-O1P  n)))
3348           (lazy-computation-of (tfo-apply tfo (nuc-O2P  n)))
3349           (lazy-computation-of (tfo-apply tfo (nuc-O5*  n)))
3350           (lazy-computation-of (tfo-apply tfo (nuc-C5*  n)))
3351           (lazy-computation-of (tfo-apply tfo (nuc-H5*  n)))
3352           (lazy-computation-of (tfo-apply tfo (nuc-H5** n)))
3353           (lazy-computation-of (tfo-apply tfo (nuc-C4*  n)))
3354           (lazy-computation-of (tfo-apply tfo (nuc-H4*  n)))
3355           (lazy-computation-of (tfo-apply tfo (nuc-O4*  n)))
3356           (lazy-computation-of (tfo-apply tfo (nuc-C1*  n)))
3357           (lazy-computation-of (tfo-apply tfo (nuc-H1*  n)))
3358           (lazy-computation-of (tfo-apply tfo (nuc-C2*  n)))
3359           (lazy-computation-of (tfo-apply tfo (nuc-H2** n)))
3360           (lazy-computation-of (tfo-apply tfo (nuc-O2*  n)))
3361           (lazy-computation-of (tfo-apply tfo (nuc-H2*  n)))
3362           (lazy-computation-of (tfo-apply tfo (nuc-C3*  n)))
3363           (lazy-computation-of (tfo-apply tfo (nuc-H3*  n)))
3364           (lazy-computation-of (tfo-apply tfo (nuc-O3*  n)))
3365           (lazy-computation-of (tfo-apply tfo (nuc-N1   n)))
3366           (lazy-computation-of (tfo-apply tfo (nuc-N3   n)))
3367           (lazy-computation-of (tfo-apply tfo (nuc-C2   n)))
3368           (lazy-computation-of (tfo-apply tfo (nuc-C4   n)))
3369           (lazy-computation-of (tfo-apply tfo (nuc-C5   n)))
3370           (lazy-computation-of (tfo-apply tfo (nuc-C6   n)))
3371           (lazy-computation-of (tfo-apply tfo (rU-O2    n)))
3372           (lazy-computation-of (tfo-apply tfo (rU-O4    n)))
3373           (lazy-computation-of (tfo-apply tfo (rU-H3    n)))
3374           (lazy-computation-of (tfo-apply tfo (rU-H5    n)))
3375           (lazy-computation-of (tfo-apply tfo (rU-H6    n)))))))
3376
3377; -- SEARCH -------------------------------------------------------------------
3378
3379; Sequential backtracking algorithm
3380
3381(define (search partial-inst domains constraint?)
3382  (if (null? domains)
3383    (list partial-inst)
3384    (let ((remaining-domains (cdr domains)))
3385
3386      (define (try-assignments lst)
3387        (if (null? lst)
3388          '()
3389          (let ((var (car lst)))
3390            (if (constraint? var partial-inst)
3391              (let* ((subsols1
3392                       (search
3393                         (cons var partial-inst)
3394                         remaining-domains
3395                         constraint?))
3396                     (subsols2
3397                       (try-assignments (cdr lst))))
3398                (append subsols1 subsols2))
3399              (try-assignments (cdr lst))))))
3400
3401      (try-assignments ((car domains) partial-inst)))))
3402
3403; -- DOMAINS ------------------------------------------------------------------
3404
3405; Primary structure:   strand A CUGCCACGUCUG, strand B CAGACGUGGCAG
3406;
3407; Secondary structure: strand A CUGCCACGUCUG
3408;                               ||||||||||||
3409;                               GACGGUGCAGAC strand B
3410;
3411; Tertiary structure:
3412;
3413;    5' end of strand A C1----G12 3' end of strand B
3414;                     U2-------A11
3415;                    G3-------C10
3416;                    C4-----G9
3417;                     C5---G8
3418;                        A6
3419;                      G6-C7
3420;                     C5----G8
3421;                    A4-------U9
3422;                    G3--------C10
3423;                     A2-------U11
3424;   5' end of strand B C1----G12 3' end of strand A
3425;
3426; "helix", "stacked" and "connected" describe the spatial relationship
3427; between two consecutive nucleotides. E.g. the nucleotides C1 and U2
3428; from the strand A.
3429;
3430; "wc" (stands for Watson-Crick and is a type of base-pairing),
3431; and "wc-dumas" describe the spatial relationship between
3432; nucleotides from two chains that are growing in opposite directions.
3433; E.g. the nucleotides C1 from strand A and G12 from strand B.
3434
3435; Dynamic Domains
3436
3437; Given,
3438;   "ref" a nucleotide which is already positioned,
3439;   "nuc" the nucleotide to be placed,
3440;   and "tfo" a transformation matrix which expresses the desired
3441;   relationship between "ref" and "nuc",
3442; the function "dgf-base" computes the transformation matrix that
3443; places the nucleotide "nuc" in the given relationship to "ref".
3444
3445(define (dgf-base tfo ref nuc)
3446  (let* ((ref-nuc (var-nuc ref))
3447         (align
3448          (tfo-inv-ortho
3449            (cond ((rA? ref-nuc)
3450                   (tfo-align (atom-pos nuc-C1* ref)
3451                              (atom-pos rA-N9   ref)
3452                              (atom-pos nuc-C4  ref)))
3453                  ((rC? ref-nuc)
3454                   (tfo-align (atom-pos nuc-C1* ref)
3455                              (atom-pos nuc-N1  ref)
3456                              (atom-pos nuc-C2  ref)))
3457                  ((rG? ref-nuc)
3458                   (tfo-align (atom-pos nuc-C1* ref)
3459                              (atom-pos rG-N9   ref)
3460                              (atom-pos nuc-C4  ref)))
3461                  (else
3462                   (tfo-align (atom-pos nuc-C1* ref)
3463                              (atom-pos nuc-N1  ref)
3464                              (atom-pos nuc-C2  ref)))))))
3465    (tfo-combine (nuc-dgf-base-tfo nuc)
3466                 (tfo-combine tfo align))))
3467
3468; Placement of first nucleotide.
3469
3470(define (reference nuc i)
3471  (lambda (partial-inst)
3472    (list (mk-var i tfo-id nuc))))
3473
3474; The transformation matrix for wc is from:
3475;
3476; Chandrasekaran R. et al (1989) A Re-Examination of the Crystal
3477; Structure of A-DNA Using Fiber Diffraction Data. J. Biomol.
3478; Struct. & Dynamics 6(6):1189-1202.
3479
3480(define wc-tfo
3481  '#(-1.0000  0.0028 -0.0019
3482      0.0028  0.3468 -0.9379
3483     -0.0019 -0.9379 -0.3468
3484     -0.0080  6.0730  8.7208))
3485
3486(define (wc nuc i j)
3487  (lambda (partial-inst)
3488    (let* ((ref (get-var j partial-inst))
3489           (tfo (dgf-base wc-tfo ref nuc)))
3490      (list (mk-var i tfo nuc)))))
3491
3492(define wc-Dumas-tfo
3493  '#(-0.9737 -0.1834  0.1352
3494     -0.1779  0.2417 -0.9539
3495      0.1422 -0.9529 -0.2679
3496      0.4837  6.2649  8.0285))
3497
3498(define (wc-Dumas nuc i j)
3499  (lambda (partial-inst)
3500    (let* ((ref (get-var j partial-inst))
3501           (tfo (dgf-base wc-Dumas-tfo ref nuc)))
3502      (list (mk-var i tfo nuc)))))
3503
3504(define helix5*-tfo
3505  '#( 0.9886 -0.0961  0.1156
3506      0.1424  0.8452 -0.5152
3507     -0.0482  0.5258  0.8492
3508     -3.8737  0.5480  3.8024))
3509
3510(define (helix5* nuc i j)
3511  (lambda (partial-inst)
3512    (let* ((ref (get-var j partial-inst))
3513           (tfo (dgf-base helix5*-tfo ref nuc)))
3514      (list (mk-var i tfo nuc)))))
3515
3516(define helix3*-tfo
3517  '#( 0.9886  0.1424 -0.0482
3518     -0.0961  0.8452  0.5258
3519      0.1156 -0.5152  0.8492
3520      3.4426  2.0474 -3.7042))
3521
3522(define (helix3* nuc i j)
3523  (lambda (partial-inst)
3524    (let* ((ref (get-var j partial-inst))
3525           (tfo (dgf-base helix3*-tfo ref nuc)))
3526      (list (mk-var i tfo nuc)))))
3527
3528(define G37-A38-tfo
3529  '#( 0.9991  0.0164 -0.0387
3530     -0.0375  0.7616 -0.6470
3531      0.0189  0.6478  0.7615
3532     -3.3018  0.9975  2.5585))
3533
3534(define (G37-A38 nuc i j)
3535  (lambda (partial-inst)
3536    (let* ((ref (get-var j partial-inst))
3537           (tfo (dgf-base G37-A38-tfo ref nuc)))
3538      (mk-var i tfo nuc))))
3539
3540(define (stacked5* nuc i j)
3541  (lambda (partial-inst)
3542    (cons ((G37-A38 nuc i j) partial-inst)
3543          ((helix5* nuc i j) partial-inst))))
3544
3545(define A38-G37-tfo
3546  '#( 0.9991 -0.0375  0.0189
3547      0.0164  0.7616  0.6478
3548     -0.0387 -0.6470  0.7615
3549      3.3819  0.7718 -2.5321))
3550
3551(define (A38-G37 nuc i j)
3552  (lambda (partial-inst)
3553    (let* ((ref (get-var j partial-inst))
3554           (tfo (dgf-base A38-G37-tfo ref nuc)))
3555      (mk-var i tfo nuc))))
3556
3557(define (stacked3* nuc i j)
3558  (lambda (partial-inst)
3559    (cons ((A38-G37 nuc i j) partial-inst)
3560          ((helix3* nuc i j) partial-inst))))
3561
3562(define (P-O3* nucs i j)
3563  (lambda (partial-inst)
3564    (let* ((ref (get-var j partial-inst))
3565           (align
3566             (tfo-inv-ortho
3567               (tfo-align (atom-pos nuc-O3* ref)
3568                          (atom-pos nuc-C3* ref)
3569                          (atom-pos nuc-C4* ref)))))
3570      (let loop ((lst nucs) (domains '()))
3571        (if (null? lst)
3572          domains
3573          (let ((nuc (car lst)))
3574            (let ((tfo-60 (tfo-combine (nuc-P-O3*-60-tfo nuc) align))
3575                  (tfo-180 (tfo-combine (nuc-P-O3*-180-tfo nuc) align))
3576                  (tfo-275 (tfo-combine (nuc-P-O3*-275-tfo nuc) align)))
3577              (loop (cdr lst)
3578                    (cons (mk-var i tfo-60 nuc)
3579                          (cons (mk-var i tfo-180 nuc)
3580                                (cons (mk-var i tfo-275 nuc) domains)))))))))))
3581
3582; -- PROBLEM STATEMENT --------------------------------------------------------
3583
3584; Define anticodon problem -- Science 253:1255 Figure 3a, 3b and 3c
3585
3586(define anticodon-domains
3587  (list
3588   (reference rC  27   )
3589   (helix5*   rC  28 27)
3590   (helix5*   rA  29 28)
3591   (helix5*   rG  30 29)
3592   (helix5*   rA  31 30)
3593   (wc        rU  39 31)
3594   (helix5*   rC  40 39)
3595   (helix5*   rU  41 40)
3596   (helix5*   rG  42 41)
3597   (helix5*   rG  43 42)
3598   (stacked3* rA  38 39)
3599   (stacked3* rG  37 38)
3600   (stacked3* rA  36 37)
3601   (stacked3* rA  35 36)
3602   (stacked3* rG  34 35);<-. Distance
3603   (P-O3*     rCs 32 31);  | Constraint
3604   (P-O3*     rUs 33 32);<-' 3.0 Angstroms
3605   ))
3606
3607; Anticodon constraint
3608
3609(define (anticodon-constraint? v partial-inst)
3610  (if (= (var-id v) 33)
3611    (let ((p   (atom-pos nuc-P (get-var 34 partial-inst))) ; P in nucleotide 34
3612          (o3* (atom-pos nuc-O3* v)))                      ; O3' in nucl. 33
3613      (FLOAT<= (pt-dist p o3*) 3.0))                       ; check distance
3614    #t))
3615
3616(define (anticodon)
3617  (search '() anticodon-domains anticodon-constraint?))
3618
3619; Define pseudoknot problem -- Science 253:1255 Figure 4a and 4b
3620
3621(define pseudoknot-domains
3622  (list
3623   (reference rA  23   )
3624   (wc-Dumas  rU   8 23)
3625   (helix3*   rG  22 23)
3626   (wc-Dumas  rC   9 22)
3627   (helix3*   rG  21 22)
3628   (wc-Dumas  rC  10 21)
3629   (helix3*   rC  20 21)
3630   (wc-Dumas  rG  11 20)
3631   (helix3*   rU* 19 20);<-.
3632   (wc-Dumas  rA  12 19);  | Distance
3633;                       ;  | Constraint
3634; Helix 1               ;  | 4.0 Angstroms
3635   (helix3*   rC   3 19);  |
3636   (wc-Dumas  rG  13  3);  |
3637   (helix3*   rC   2  3);  |
3638   (wc-Dumas  rG  14  2);  |
3639   (helix3*   rC   1  2);  |
3640   (wc-Dumas  rG* 15  1);  |
3641;                       ;  |
3642; L2 LOOP               ;  |
3643   (P-O3*     rUs 16 15);  |
3644   (P-O3*     rCs 17 16);  |
3645   (P-O3*     rAs 18 17);<-'
3646;
3647; L1 LOOP
3648   (helix3*   rU   7  8);<-.
3649   (P-O3*     rCs  4  3);  | Constraint
3650   (stacked5* rU   5  4);  | 4.5 Angstroms
3651   (stacked5* rC   6  5);<-'
3652   ))
3653
3654; Pseudoknot constraint
3655
3656(define (pseudoknot-constraint? v partial-inst)
3657  (case (var-id v)
3658    ((18)
3659     (let ((p   (atom-pos nuc-P (get-var 19 partial-inst)))
3660           (o3* (atom-pos nuc-O3* v)))
3661       (FLOAT<= (pt-dist p o3*) 4.0)))
3662    ((6)
3663     (let ((p   (atom-pos nuc-P (get-var 7 partial-inst)))
3664           (o3* (atom-pos nuc-O3* v)))
3665       (FLOAT<= (pt-dist p o3*) 4.5)))
3666    (else
3667     #t)))
3668
3669(define (pseudoknot)
3670  (search '() pseudoknot-domains pseudoknot-constraint?))
3671
3672; -- TESTING -----------------------------------------------------------------
3673
3674(define (list-of-atoms n)
3675  (append (list-of-common-atoms n)
3676          (list-of-specific-atoms n)))
3677
3678(define (list-of-common-atoms n)
3679  (list
3680    (nuc-P    n)
3681    (nuc-O1P  n)
3682    (nuc-O2P  n)
3683    (nuc-O5*  n)
3684    (nuc-C5*  n)
3685    (nuc-H5*  n)
3686    (nuc-H5** n)
3687    (nuc-C4*  n)
3688    (nuc-H4*  n)
3689    (nuc-O4*  n)
3690    (nuc-C1*  n)
3691    (nuc-H1*  n)
3692    (nuc-C2*  n)
3693    (nuc-H2** n)
3694    (nuc-O2*  n)
3695    (nuc-H2*  n)
3696    (nuc-C3*  n)
3697    (nuc-H3*  n)
3698    (nuc-O3*  n)
3699    (nuc-N1   n)
3700    (nuc-N3   n)
3701    (nuc-C2   n)
3702    (nuc-C4   n)
3703    (nuc-C5   n)
3704    (nuc-C6   n)))
3705
3706(define (list-of-specific-atoms n)
3707  (cond ((rA? n)
3708         (list
3709           (rA-N6   n)
3710           (rA-N7   n)
3711           (rA-N9   n)
3712           (rA-C8   n)
3713           (rA-H2   n)
3714           (rA-H61  n)
3715           (rA-H62  n)
3716           (rA-H8   n)))
3717        ((rC? n)
3718         (list
3719           (rC-N4   n)
3720           (rC-O2   n)
3721           (rC-H41  n)
3722           (rC-H42  n)
3723           (rC-H5   n)
3724           (rC-H6   n)))
3725        ((rG? n)
3726         (list
3727           (rG-N2   n)
3728           (rG-N7   n)
3729           (rG-N9   n)
3730           (rG-C8   n)
3731           (rG-O6   n)
3732           (rG-H1   n)
3733           (rG-H21  n)
3734           (rG-H22  n)
3735           (rG-H8   n)))
3736        (else
3737         (list
3738           (rU-O2   n)
3739           (rU-O4   n)
3740           (rU-H3   n)
3741           (rU-H5   n)
3742           (rU-H6   n)))))
3743
3744(define (var-most-distant-atom v)
3745
3746  (define (distance pos)
3747    (let ((abs-pos (absolute-pos v pos)))
3748      (let ((x (pt-x abs-pos)) (y (pt-y abs-pos)) (z (pt-z abs-pos)))
3749        (FLOATsqrt (FLOAT+ (FLOAT* x x) (FLOAT* y y) (FLOAT* z z))))))
3750
3751  (maximum (map distance (list-of-atoms (var-nuc v)))))
3752
3753(define (sol-most-distant-atom s)
3754  (maximum (map var-most-distant-atom s)))
3755
3756(define (most-distant-atom sols)
3757  (maximum (map sol-most-distant-atom sols)))
3758
3759(define (maximum lst)
3760  (let loop ((m (car lst)) (l (cdr lst)))
3761    (if (null? l)
3762      m
3763      (let ((x (car l)))
3764        (loop (if (FLOAT> x m) x m) (cdr l))))))
3765
3766(define (check)
3767  (length (pseudoknot)))
3768
3769(define (run)
3770  (most-distant-atom (pseudoknot)))
3771
3772; To run program, evaluate: (run)
3773