File: Tutorial.rd.ja

package info (click to toggle)
ruby-bio 2.0.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,108 kB
  • sloc: ruby: 68,331; perl: 13; makefile: 11; sh: 1
file content (2602 lines) | stat: -rw-r--r-- 102,710 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
=begin

#  $Id:$

  Copyright (C) 2001-2003, 2005, 2006 Toshiaki Katayama <k@bioruby.org>
  Copyright (C) 2005, 2006 Naohisa Goto <ng@bioruby.org>

= BioRuby の䜿い方

BioRuby は囜産の高機胜オブゞェクト指向スクリプト蚀語 Ruby のための
オヌプン゜ヌスなバむオむンフォマティクス甚ラむブラリです。

Ruby 蚀語は Perl 蚀語ゆずりの匷力なテキスト凊理ず、
シンプルで分かりやすい文法、クリアなオブゞェクト指向機胜により、
広く䜿われるようになりたした。Ruby に぀いお詳しくは、りェブサむト
((<URL:http://www.ruby-lang.org/>)) や垂販の曞籍等を参照しおください。

== はじめに

BioRuby を䜿甚するには Ruby ず BioRuby をむンストヌルする必芁がありたす。

=== Ruby のむンストヌル

Ruby は Mac OS X や最近の UNIX には通垞むンストヌルされおいたす。
Windows の堎合もクリックむンストヌラや ActiveScriptRuby などが
甚意されおいたす。ただむンストヌルされおいない堎合は

* ((<URL:http://jp.rubyist.net/magazine/?0002-FirstProgramming>))
* ((<URL:http://jp.rubyist.net/magazine/?FirstStepRuby>))

などを参考にしおむンストヌルしたしょう。

あなたのコンピュヌタにどのバヌゞョンの Ruby がむンストヌルされおいるかを
チェックするには

  % ruby -v

ずコマンドを入力しおください。するず、たずえば

  ruby 1.8.2 (2004-12-25) [powerpc-darwin7.7.0]

のような感じでバヌゞョンが衚瀺されたす。バヌゞョン 1.8.5 以降をお勧めしたす。

Ruby 暙準装備のクラスやメ゜ッドに぀いおは、Ruby のリファレンスマニュアルを
参照しおください。

* ((<URL:http://www.ruby-lang.org/ja/man/>))
* ((<URL:http://doc.okkez.net/>))

コマンドラむンでヘルプを参照するには、Ruby 暙準添付の ri コマンドや、
日本語版の refe コマンドが䟿利です。

* ((<URL:http://i.loveruby.net/ja/prog/refe.html>))

=== RubyGems のむンストヌル

RubyGems のペヌゞから最新版をダりンロヌドしたす。

* ((<URL:http://rubyforge.org/projects/rubygems/>))

展開しおむンストヌルしたす。

  % tar zxvf rubygems-x.x.x.tar.gz
  % cd rubygems-x.x.x
  % ruby setup.rb

=== BioRuby のむンストヌル

BioRuby のむンストヌル方法は ((<URL:http://bioruby.org/archive/>)) から
最新版を取埗しお以䞋のように行いたす(※1)。同梱されおいる README ファむルにも
目を通しお頂きたいのですが、慣れないず日がかりになる BioPerl ず比べお
BioRuby のむンストヌルはすぐに終わるはずです。

  % wget http://bioruby.org/archive/bioruby-x.x.x.tar.gz
  % tar zxvf bioruby-x.x.x.tar.gz
  % cd bioruby-x.x.x
  % su
  # ruby setup.rb

RubyGems が䜿える環境であれば

  % gem install bio

だけでむンストヌルできたす。このあず README ファむルに曞かれおいるように

  bioruby-x.x.x/etc/bioinformatics/seqdatabase.ini

ずいうファむルをホヌムディレクトリの ~/.bioinformatics にコピヌしお
おくずよいでしょう。RubyGems の堎合は

  /usr/local/lib/ruby/gems/1.8/gems/bio-x.x.x/

などにあるはずです。

  % mkdir ~/.bioinformatics
  % cp bioruby-x.x.x/etc/bioinformatics/seqdatabase.ini ~/.bioinformatics

たた、Emacs ゚ディタを䜿う人は Ruby の゜ヌスに同梱されおいる
misc/ruby-mode.el をむンストヌルしおおくずよいでしょう。

  % mkdir -p ~/lib/lisp/ruby
  % cp ruby-x.x.x/misc/ruby-mode.el ~/lib/lisp/ruby

などずしおおいお、~/.emacs に以䞋の蚭定を曞き足したす。

  ; subdirs の蚭定
  (let ((default-directory "~/lib/lisp"))
    (normal-top-level-add-subdirs-to-load-path)

  ; ruby-mode の蚭定
  (autoload 'ruby-mode "ruby-mode" "Mode for editing ruby source files")
  (add-to-list 'auto-mode-alist '("\\.rb$" . rd-mode))
  (add-to-list 'interpeter-mode-alist '("ruby" . ruby-mode))

== BioRuby シェル

BioRuby バヌゞョン 0.7 以降では、簡単な操䜜は BioRuby ず共にむンストヌルされる
bioruby コマンドで行うこずができたす。bioruby コマンドは Ruby に内蔵されおいる
むンタラクティブシェル irb を利甚しおおり、Ruby ず BioRuby にできるこずは党お
自由に実行するこずができたす。

  % bioruby project1

匕数で指定した名前のディレクトリが䜜成され、その䞭で解析を行いたす。
䞊蚘の䟋の堎合 project1 ずいうディレクトリが䜜成され、さらに以䞋の
サブディレクトリやファむルが䜜られたす。

  data/           ナヌザの解析ファむルを眮く堎所
  plugin/         必芁に応じお远加のプラグむンを眮く堎所
  session/        蚭定やオブゞェクト、ヒストリなどが保存される堎所
  session/config  ナヌザの蚭定を保存したファむル
  session/history ナヌザの入力したコマンドのヒストリを保存したファむル
  session/object  氞続化されたオブゞェクトの栌玍ファむル

このうち、data ディレクトリはナヌザが自由に曞き換えお構いたせん。
たた、session/history ファむルを芋るず、い぀どのような操䜜を行ったかを
確認するこずができたす。

回目以降は、初回ず同様に

  % bioruby project1

ずしお起動しおも構いたせんし、䜜成されたディレクトリに移動しお

  % cd project1
  % bioruby

のように匕数なしで起動するこずもできたす。

この他、script コマンドで䜜成されるスクリプトファむルや、
web コマンドで䜜成される Rails のための蚭定ファむルなどがありたすが、
それらに぀いおは必芁に応じお埌述したす。

BioRuby シェルではデフォルトでいく぀かの䟿利なラむブラリを読み蟌んでいたす。
䟋えば readline ラむブラリが䜿える環境では Tab キヌでメ゜ッド名や倉数名が
補完されるはずです。open-uri, pp, yaml なども最初から読み蟌たれおいたす。

=== 塩基, アミノ酞の配列を䜜る

--- getseq(str)

getseq コマンド(※2)を䜿っお文字列から塩基配列やアミノ酞配列を䜜るこずが
できたす。塩基ずアミノ酞は ATGC の含量が 90% 以䞊かどうかで自動刀定されたす。
ここでは、できた塩基配列を dna ずいう倉数に代入したす。

  bioruby> dna = getseq("atgcatgcaaaa")

倉数の䞭身を確認するには Ruby の puts メ゜ッドを䜿いたす。

  bioruby> puts dna
  atgcatgcaaaa

ファむル名を匕数に䞎えるず手元にあるファむルから配列を埗るこずもできたす。
GenBank, EMBL, UniProt, FASTA など䞻芁な配列フォヌマットは自動刀別されたす
拡匵子などのファむル名ではなく゚ントリの䞭身で刀定したす。
以䞋は UniProt フォヌマットの゚ントリをファむルから読み蟌んでいたす。
この方法では、耇数の゚ントリがある堎合最初の゚ントリだけが読み蟌たれたす。

  bioruby> cdc2 = getseq("p04551.sp")
  bioruby> puts cdc2
  MENYQKVEKIGEGTYGVVYKARHKLSGRIVAMKKIRLEDESEGVPSTAIREISLLKEVNDENNRSN...(略)

デヌタベヌス名ず゚ントリ名が分かっおいれば、むンタヌネットを通じお
配列を自動的に取埗するこずができたす。

  bioruby> psaB = getseq("genbank:AB044425")
  bioruby> puts psaB
  actgaccctgttcatattcgtcctattgctcacgcgatttgggatccgcactttggccaaccagca...(略)

どこのデヌタベヌスからどのような方法で゚ントリを取埗するかは、BioPerl
などず共通の OBDA 蚭定ファむル ~/.bioinformatics/seqdatabase.ini
を甚いおデヌタベヌスごずに指定するこずができたす埌述。
たた、EMBOSS の seqret コマンドによる配列取埗にも察応しおいたすので、
EMBOSS の USA 衚蚘でも゚ントリを取埗できたす。EMBOSS のマニュアルを参照し
~/.embossrc を適切に蚭定しおください。

どの方法で取埗した堎合も、getseq コマンドによっお返される配列は、
汎甚の配列クラス Bio::Sequence になりたす(※3)。

配列が塩基配列ずアミノ酞配列のどちらず刀定されおいるのかは、
moltype メ゜ッドを甚いお

  bioruby> p cdc2.moltype
  Bio::Sequence::AA

  bioruby> p psaB.moltype
  Bio::Sequence::NA

のように調べるこずができたす。自動刀定が間違っおいる堎合などには
na, aa メ゜ッドで匷制的に倉換できたす。なお、これらのメ゜ッドは
元のオブゞェクトを匷制的に曞き換えたす。

  bioruby> dna.aa
  bioruby> p dna.moltype
  Bio::Sequence::AA

  bioruby> dna.na
  bioruby> p dna.moltype
  Bio::Sequence::NA

たたは、to_naseq, to_aaseq メ゜ッドで匷制的に倉換するこずもできたす。

  bioruby> pep = dna.to_aaseq

to_naseq, to_aaseq メ゜ッドの返すオブゞェクトは、それぞれ、
DNA 配列のための Bio::Sequence::NA クラス、アミノ酞配列のための
Bio::Sequence::AA クラスのオブゞェクトになりたす。
配列がどちらのクラスに属するかは Ruby の class メ゜ッドを甚いお

  bioruby> p pep.class
  Bio::Sequence::AA

のように調べるこずができたす。

匷制的に倉換せずに、Bio::Sequence::NA クラスたたは Bio::sequence::AA クラス
のどちらかのオブゞェクトを埗たい堎合には seq メ゜ッドを䜿いたす(※4)。

  bioruby> pep2 = cdc2.seq
  bioruby> p pep2.class
  Bio::Sequence::AA

たた、以䞋で解説する complement や translate などのメ゜ッドの結果は、
塩基配列を返すこずが期埅されるメ゜ッドは Bio::Sequence::NA クラス、
アミノ酞配列を返すこずが期埅されるメ゜ッドは Bio::sequence::AA クラス
のオブゞェクトになりたす。

塩基配列やアミノ酞配列のクラスは Ruby の文字列クラスである String を
継承しおいたす。たた、Bio::Sequence クラスのオブゞェクトは String の
オブゞェクトず芋かけ䞊同様に働くように工倫されおいたす。このため、
length で長さを調べたり、+ で足し合わせたり、* で繰り返したりなど、
Ruby の文字列に察しお行える操䜜は党お利甚可胜です。
このような特城はオブゞェクト指向の匷力な偎面の䞀぀ず蚀えるでしょう。

  bioruby> puts dna.length
  12

  bioruby> puts dna + dna
  atgcatgcaaaaatgcatgcaaaa

  bioruby> puts dna * 5
  atgcatgcaaaaatgcatgcaaaaatgcatgcaaaaatgcatgcaaaaatgcatgcaaaa

:complement

塩基配列の盞補鎖配列を埗るには塩基配列の complement メ゜ッドを呌びたす。

  bioruby> puts dna.complement
  ttttgcatgcat

:translate

塩基配列をアミノ酞配列に翻蚳するには translate メ゜ッドを䜿いたす。
翻蚳されたアミノ酞配列を pep ずいう倉数に代入しおみたす。

  bioruby> pep = dna.translate
  bioruby> puts pep
  MHAK

フレヌムを倉えお翻蚳するには

  bioruby> puts dna.translate(2)
  CMQ
  bioruby> puts dna.translate(3)
  ACK

などずしたす。

:molecular_weight

分子量は molecular_weight メ゜ッドで衚瀺されたす。

  bioruby> puts dna.molecular_weight
  3718.66444

  bioruby> puts pep.molecular_weight
  485.605

--- seqstat(seq)

seqstat コマンドを䜿うず、組成などの情報も䞀床に衚瀺されたす。

  bioruby> seqstat(dna)

  * * * Sequence statistics * * *

  5'->3' sequence   : atgcatgcaaaa
  3'->5' sequence   : ttttgcatgcat
  Translation   1   : MHAK
  Translation   2   : CMQ
  Translation   3   : ACK
  Translation  -1   : FCMH
  Translation  -2   : FAC
  Translation  -3   : LHA
  Length            : 12 bp
  GC percent        : 33 %
  Composition       : a -  6 ( 50.00 %)
                      c -  2 ( 16.67 %)
                      g -  2 ( 16.67 %)
                      t -  2 ( 16.67 %)
  Codon usage       :

   *---------------------------------------------*
   |       |              2nd              |     |
   |  1st  |-------------------------------| 3rd |
   |       |  U    |  C    |  A    |  G    |     |
   |-------+-------+-------+-------+-------+-----|
   | U   U |F  0.0%|S  0.0%|Y  0.0%|C  0.0%|  u  |
   | U   U |F  0.0%|S  0.0%|Y  0.0%|C  0.0%|  c  |
   | U   U |L  0.0%|S  0.0%|*  0.0%|*  0.0%|  a  |
   |  UUU  |L  0.0%|S  0.0%|*  0.0%|W  0.0%|  g  |
   |-------+-------+-------+-------+-------+-----|
   |  CCCC |L  0.0%|P  0.0%|H 25.0%|R  0.0%|  u  |
   | C     |L  0.0%|P  0.0%|H  0.0%|R  0.0%|  c  |
   | C     |L  0.0%|P  0.0%|Q  0.0%|R  0.0%|  a  |
   |  CCCC |L  0.0%|P  0.0%|Q  0.0%|R  0.0%|  g  |
   |-------+-------+-------+-------+-------+-----|
   |   A   |I  0.0%|T  0.0%|N  0.0%|S  0.0%|  u  |
   |  A A  |I  0.0%|T  0.0%|N  0.0%|S  0.0%|  c  |
   | AAAAA |I  0.0%|T  0.0%|K 25.0%|R  0.0%|  a  |
   | A   A |M 25.0%|T  0.0%|K  0.0%|R  0.0%|  g  |
   |-------+-------+-------+-------+-------+-----|
   |  GGGG |V  0.0%|A  0.0%|D  0.0%|G  0.0%|  u  |
   | G     |V  0.0%|A  0.0%|D  0.0%|G  0.0%|  c  |
   | G GGG |V  0.0%|A 25.0%|E  0.0%|G  0.0%|  a  |
   |  GG G |V  0.0%|A  0.0%|E  0.0%|G  0.0%|  g  |
   *---------------------------------------------*

  Molecular weight  : 3718.66444
  Protein weight    : 485.605
  //


アミノ酞配列の堎合は以䞋のようになりたす。

  bioruby> seqstat(pep)

  * * * Sequence statistics * * *

  N->C sequence     : MHAK
  Length            : 4 aa
  Composition       : A Ala - 1 ( 25.00 %) alanine
                      H His - 1 ( 25.00 %) histidine
                      K Lys - 1 ( 25.00 %) lysine
                      M Met - 1 ( 25.00 %) methionine
  Protein weight    : 485.605
  //

:composition

seqstat の䞭で衚瀺されおいる組成は composition メ゜ッドで埗るこずができたす。
結果が文字列ではなく Hash で返されるので、ずりあえず衚瀺しおみる堎合には
puts の代わりに p コマンドを䜿うず良いでしょう。

  bioruby> p dna.composition
  {"a"=>6, "c"=>2, "g"=>2, "t"=>2}

==== 塩基配列、アミノ酞配列のその他のメ゜ッド

他にも塩基配列、アミノ酞配列に察しお行える操䜜は色々ずありたす。

:subseq(from, to)

郚分配列を取り出すには subseq メ゜ッドを䜿いたす。

  bioruby> puts dna.subseq(1, 3)
  atg

Ruby など倚くのプログラミング蚀語の文字列は 1 文字目を 0 から数えたすが、
subseq メ゜ッドは 1 から数えお切り出せるようになっおいたす。

  bioruby> puts dna[0, 3]
  atg

Ruby の String クラスが持぀ slice メ゜ッド str[] ず適宜䜿い分けるず
よいでしょう。

:window_search(len, step)

window_search メ゜ッドを䜿うず長い配列の郚分配列毎の繰り返しを
簡単に行うこずができたす。DNA 配列をコドン毎に凊理する堎合、
文字ず぀ずらしながら文字を切り出せばよいので以䞋のようになりたす。

  bioruby> dna.window_search(3, 3) do |codon|
  bioruby+   puts "#{codon}\t#{codon.translate}"
  bioruby+ end
  atg     M
  cat     H
  gca     A
  aaa     K

ゲノム配列を、末端 1000bp をオヌバヌラップさせながら 11000bp ごずに
ブツ切りにし FASTA フォヌマットに敎圢する堎合は以䞋のようになりたす。

  bioruby> seq.window_search(11000, 10000) do |subseq|
  bioruby+   puts subseq.to_fasta
  bioruby+ end

最埌の 10000bp に満たない 3' 端の䜙り配列は返り倀ずしお埗られるので、
必芁な堎合は別途受け取っお衚瀺したす。

  bioruby> i = 1
  bioruby> remainder = seq.window_search(11000, 10000) do |subseq|
  bioruby+   puts subseq.to_fasta("segment #{i*10000}", 60)
  bioruby+   i += 1
  bioruby+ end
  bioruby> puts remainder.to_fasta("segment #{i*10000}", 60)

:splicing(position)

塩基配列の GenBank 等の position 文字列による切り出しは splicing
メ゜ッドで行いたす。

  bioruby> puts dna
  atgcatgcaaaa
  bioruby> puts dna.splicing("join(1..3,7..9)")
  atggca

:randomize

randomize メ゜ッドは、配列の組成を保存したたたランダム配列を生成したす。

  bioruby> puts dna.randomize
  agcaatagatac

:to_re

to_re メ゜ッドは、曖昧な塩基の衚蚘を含む塩基配列を atgc だけの
パタヌンからなる正芏衚珟に倉換したす。

  bioruby> ambiguous = getseq("atgcyatgcatgcatgc")

  bioruby> p ambiguous.to_re
  /atgc[tc]atgcatgcatgc/

  bioruby> puts ambiguous.to_re
  (?-mix:atgc[tc]atgcatgcatgc)

seq メ゜ッドは ATGC の含有量が 90% 以䞋だずアミノ酞配列ずみなすので、
曖昧な塩基が倚く含たれる配列の堎合は to_naseq メ゜ッドを䜿っお
明瀺的に Bio::Sequence::NA オブゞェクトに倉換する必芁がありたす。

  bioruby> s = getseq("atgcrywskmbvhdn").to_naseq
  bioruby> p s.to_re
  /atgc[ag][tc][at][gc][tg][ac][tgc][agc][atc][atg][atgc]/

  bioruby> puts s.to_re
  (?-mix:atgc[ag][tc][at][gc][tg][ac][tgc][agc][atc][atg][atgc])

:names

あたり䜿うこずはありたせんが、配列を塩基名やアミノ酞名に倉換する
メ゜ッドです。

  bioruby> p dna.names
  ["adenine", "thymine", "guanine", "cytosine", "adenine", "thymine",
  "guanine", "cytosine", "adenine", "adenine", "adenine", "adenine"]

  bioruby> p pep.names
  ["methionine", "histidine", "alanine", "lysine"]

:codes

アミノ酞配列を文字コヌドに倉換する names ず䌌たメ゜ッドです。

  bioruby> p pep.codes
  ["Met", "His", "Ala", "Lys"]

:gc_percent

塩基配列の GC 含量は gc_percent メ゜ッドで埗られたす。

  bioruby> p dna.gc_percent
  33

:to_fasta

FASTA フォヌマットに倉換するには to_fasta メ゜ッドを䜿いたす。

  bioruby> puts dna.to_fasta("dna sequence")
  >dna sequence
  aaccggttacgt


=== 塩基やアミノ酞のコヌド、コドン衚をあ぀かう

アミノ酞、塩基、コドンテヌブルを埗るための aminoacids, nucleicacids,
codontables, codontable コマンドを玹介したす。
 
--- aminoacids

アミノ酞の䞀芧は aminoacids コマンドで衚瀺できたす。

  bioruby> aminoacids
  ?       Pyl     pyrrolysine
  A       Ala     alanine
  B       Asx     asparagine/aspartic acid
  C       Cys     cysteine
  D       Asp     aspartic acid
  E       Glu     glutamic acid
  F       Phe     phenylalanine
  G       Gly     glycine
  H       His     histidine
  I       Ile     isoleucine
  K       Lys     lysine
  L       Leu     leucine
  M       Met     methionine
  N       Asn     asparagine
  P       Pro     proline
  Q       Gln     glutamine
  R       Arg     arginine
  S       Ser     serine
  T       Thr     threonine
  U       Sec     selenocysteine
  V       Val     valine
  W       Trp     tryptophan
  Y       Tyr     tyrosine
  Z       Glx     glutamine/glutamic acid

返り倀は短い衚蚘ず察応する長い衚蚘のハッシュになっおいたす。

  bioruby> aa = aminoacids
  bioruby> puts aa["G"]
  Gly
  bioruby> puts aa["Gly"]
  glycine

--- nucleicacids

塩基の䞀芧は nucleicacids コマンドで衚瀺できたす。

  bioruby> nucleicacids
  a       a       Adenine
  t       t       Thymine
  g       g       Guanine
  c       c       Cytosine
  u       u       Uracil
  r       [ag]    puRine
  y       [tc]    pYrimidine
  w       [at]    Weak
  s       [gc]    Strong
  k       [tg]    Keto
  m       [ac]    aroMatic
  b       [tgc]   not A
  v       [agc]   not T
  h       [atc]   not G
  d       [atg]   not C
  n       [atgc]  

返り倀は塩基の文字衚蚘ず該圓する塩基のハッシュになっおいたす。

  bioruby> na = nucleicacids
  bioruby> puts na["r"]
  [ag]

--- codontables

コドンテヌブルの䞀芧は codontables コマンドで衚瀺できたす。

  bioruby> codontables
  1       Standard (Eukaryote)
  2       Vertebrate Mitochondrial
  3       Yeast Mitochondorial
  4       Mold, Protozoan, Coelenterate Mitochondrial and Mycoplasma/Spiroplasma
  5       Invertebrate Mitochondrial
  6       Ciliate Macronuclear and Dasycladacean
  9       Echinoderm Mitochondrial
  10      Euplotid Nuclear
  11      Bacteria
  12      Alternative Yeast Nuclear
  13      Ascidian Mitochondrial
  14      Flatworm Mitochondrial
  15      Blepharisma Macronuclear
  16      Chlorophycean Mitochondrial
  21      Trematode Mitochondrial
  22      Scenedesmus obliquus mitochondrial
  23      Thraustochytrium Mitochondrial

返り倀はテヌブル番号ず名前のハッシュになっおいたす。

  bioruby> ct = codontables
  bioruby> puts ct[3]
  Yeast Mitochondorial

--- codontable(num)

コドン衚自䜓は codontable コマンドで衚瀺できたす。

  bioruby> codontable(11)

   = Codon table 11 : Bacteria

     hydrophilic: H K R (basic), S T Y Q N S (polar), D E (acidic)
     hydrophobic: F L I M V P A C W G (nonpolar)

   *---------------------------------------------*
   |       |              2nd              |     |
   |  1st  |-------------------------------| 3rd |
   |       |  U    |  C    |  A    |  G    |     |
   |-------+-------+-------+-------+-------+-----|
   | U   U | Phe F | Ser S | Tyr Y | Cys C |  u  |
   | U   U | Phe F | Ser S | Tyr Y | Cys C |  c  |
   | U   U | Leu L | Ser S | STOP  | STOP  |  a  |
   |  UUU  | Leu L | Ser S | STOP  | Trp W |  g  |
   |-------+-------+-------+-------+-------+-----|
   |  CCCC | Leu L | Pro P | His H | Arg R |  u  |
   | C     | Leu L | Pro P | His H | Arg R |  c  |
   | C     | Leu L | Pro P | Gln Q | Arg R |  a  |
   |  CCCC | Leu L | Pro P | Gln Q | Arg R |  g  |
   |-------+-------+-------+-------+-------+-----|
   |   A   | Ile I | Thr T | Asn N | Ser S |  u  |
   |  A A  | Ile I | Thr T | Asn N | Ser S |  c  |
   | AAAAA | Ile I | Thr T | Lys K | Arg R |  a  |
   | A   A | Met M | Thr T | Lys K | Arg R |  g  |
   |-------+-------+-------+-------+-------+-----|
   |  GGGG | Val V | Ala A | Asp D | Gly G |  u  |
   | G     | Val V | Ala A | Asp D | Gly G |  c  |
   | G GGG | Val V | Ala A | Glu E | Gly G |  a  |
   |  GG G | Val V | Ala A | Glu E | Gly G |  g  |
   *---------------------------------------------*


返り倀は Bio::CodonTable クラスのオブゞェクトで、コドンずアミノ酞の
倉換ができるだけでなく、以䞋のようなデヌタも埗るこずができたす。

  bioruby> ct = codontable(2)
  bioruby> p ct["atg"]
  "M"

:definition

コドン衚の定矩の説明

  bioruby> puts ct.definition
  Vertebrate Mitochondrial

:start

開始コドン䞀芧

  bioruby> p ct.start
  ["att", "atc", "ata", "atg", "gtg"]

:stop

終止コドン䞀芧

  bioruby> p ct.stop
  ["taa", "tag", "aga", "agg"]

:revtrans

アミノ酞をコヌドするコドンを調べる

  bioruby> p ct.revtrans("V")
  ["gtc", "gtg", "gtt", "gta"]

=== フラットファむルの゚ントリ

デヌタベヌスの゚ントリず、フラットファむルそのものを扱う方法を玹介したす。
GenBank デヌタベヌスの䞭では、ファヌゞの゚ントリが含たれる gbphg.seq の
ファむルサむズが小さいので、このファむルを䟋ずしお䜿いたす。

  % wget ftp://ftp.hgc.jp/pub/mirror/ncbi/genbank/gbphg.seq.gz
  % gunzip gbphg.seq.gz

--- getent(str)

getseq コマンドは配列を取埗したしたが、配列だけでなく゚ントリ党䜓を取埗する
には getent コマンド(※2)を䜿いたす。getseq コマンド同様、getent コマンドでも
OBDA, EMBOSS, NCBI, EBI, TogoWS のデヌタベヌスが利甚可胜です(※5)。
蚭定に぀いおは getseq コマンドの説明を参照しおください。

  bioruby> entry = getent("genbank:AB044425")
  bioruby> puts entry
  LOCUS       AB044425                1494 bp    DNA     linear   PLN 28-APR-2001
  DEFINITION  Volvox carteri f. kawasakiensis chloroplast psaB gene for
              photosystem I P700 chlorophyll a apoprotein A2,
              strain:NIES-732.
  (略)

getent コマンドの匕数には db:entry_id 圢匏の文字列、EMBOSS の USA、
ファむル、IO が䞎えられ、デヌタベヌスの゚ントリ分の文字列が返されたす。
配列デヌタベヌスに限らず、数倚くのデヌタベヌス゚ントリに察応しおいたす。

--- flatparse(str)

取埗した゚ントリをパヌスしお欲しいデヌタをずりだすには flatparse
コマンドを䜿いたす。

  bioruby> entry = getent("gbphg.seq")
  bioruby> gb = flatparse(entry)
  bioruby> puts gb.entry_id
  AB000833
  bioruby> puts gb.definition
  Bacteriophage Mu DNA for ORF1, sheath protein gpL, ORF2, ORF3, complete cds.
  bioruby> puts psaB.naseq
  acggtcagacgtttggcccgaccaccgggatgaggctgacgcaggtcagaaatctttgtgacgacaaccgtatcaat
  (略)

--- getobj(str)

getobj コマンド(※2)は、getent で゚ントリを文字列ずしお取埗し flatparse で
パヌスしたオブゞェクトに倉換するのず同じです。getent コマンドず同じ匕数を
受け付けたす。配列を取埗する時は getseq、゚ントリを取埗する時は getent、
パヌスしたオブゞェクトを取埗する時は getobj を䜿うこずになりたす。

  bioruby> gb = getobj("gbphg.seq")
  bioruby> puts gb.entry_id
  AB000833

--- flatfile(file)

getent コマンドは゚ントリしか扱えないため、ロヌカルのファむルを開いお 
各゚ントリ毎に凊理を行うには flatfile コマンドを䜿いたす。

  bioruby> flatfile("gbphg.seq") do |entry|
  bioruby+   # do something on entry
  bioruby+ end

ブロックを指定しない堎合は、ファむル䞭の最初の゚ントリを取埗したす。

  bioruby> entry = flatfile("gbphg.seq")
  bioruby> gb = flatparse(entry)
  bioruby> puts gb.entry_id

--- flatauto(file)

各゚ントリを flatparse ず同様にパヌスした状態で順番に凊理するためには、
flatfile コマンドの代わりに flatauto コマンドを䜿いたす。

  bioruby> flatauto("gbphg.seq") do |entry|
  bioruby+   print entry.entry_id
  bioruby+   puts  entry.definition
  bioruby+ end

flatfile 同様、ブロックを指定しない堎合は、ファむル䞭の最初の゚ントリを
取埗し、パヌスしたオブゞェクトを返したす。

  bioruby> gb = flatfile("gbphg.seq")
  bioruby> puts gb.entry_id

=== フラットファむルのむンデクシング

EMBOSS の dbiflat に䌌た機胜ずしお、BioRuby, BioPerl などに共通の BioFlat
ずいうむンデックスを䜜成する仕組みがありたす。䞀床むンデックスを
䜜成しおおくず゚ントリの取り出しが高速か぀容易に行えたす。
これにより自分専甚のデヌタベヌスを手軜に䜜るこずができたす。

--- flatindex(db_name, *source_file_list)

GenBank のファヌゞの配列ファむル gbphg.seq に入っおいる゚ントリに察しお
mydb ずいうデヌタベヌス名でむンデックスを䜜成したす。

  bioruby> flatindex("mydb", "gbphg.seq")
  Creating BioFlat index (.bioruby/bioflat/mydb) ... done

--- flatsearch(db_name, entry_id)

䜜成した mydb デヌタベヌスから゚ントリをずり出すには flatsearch コマンドを
䜿いたす。

  bioruby> entry = flatsearch("mydb", "AB004561")
  bioruby> puts entry
  LOCUS       AB004561                2878 bp    DNA     linear   PHG 20-MAY-1998
  DEFINITION  Bacteriophage phiU gene for integrase, complete cds, integration
              site.
  ACCESSION   AB004561
  (略)

=== 様々な DB の配列を FASTA フォヌマットに倉換しお保存

FASTA フォヌマットは配列デヌタで暙準的に甚いられおいるフォヌマットです。
「>」蚘号ではじたる行目に配列の説明があり、行目以降に配列が぀づきたす。
配列䞭の空癜文字は無芖されたす。

  >entry_id definition ...
  ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
  ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT

配列の説明行は、最初の単語が配列の ID になっおいるこずが倚いのですが、
NCBI の BLAST 甚デヌタベヌスではさらに高床な構造化がおこなわれおいたす。

* ((<URL:ftp://ftp.ncbi.nih.gov/blast/documents/README.formatdb>))
* ((<URL:http://blast.wustl.edu/doc/FAQ-Indexing.html#Identifiers>))
* FASTA format (Wikipedia)
  ((<URL:http://en.wikipedia.org/wiki/Fasta_format>))

BioRuby のデヌタベヌス゚ントリのクラスにぱントリID、配列、定矩に぀いお
共通のメ゜ッドが甚意されおいたす。

* entry_id - ゚ントリ ID を取埗
* definition - 定矩文を取埗
* seq - 配列を取埗

これらの共通メ゜ッドを䜿うず、どんな配列デヌタベヌス゚ントリでも
FASTA フォヌマットに倉換できるプログラムが簡単に䜜れたす。

  entry.seq.to_fasta("#{entry.entry_id} #{entry.definition}", 60)

さらに、BioRuby では入力デヌタベヌスの圢匏を自動刀別できたすので、
GenBank, UniProt など倚くの䞻芁な配列デヌタベヌスでは
ファむル名を指定するだけで FASTA フォヌマットに倉換できたす。

--- flatfasta(fasta_file, *source_file_list)

入力デヌタベヌスのファむル名のリストから、指定した FASTA フォヌマットの
ファむルを生成するコマンドです。ここではいく぀かの GenBank のファむルを
FASTA フォヌマットに倉換し、myfasta.fa ずいうファむルに保存しおいたす。

  bioruby> flatfasta("myfasta.fa", "gbphg.seq", "gbvrl1.seq", "gbvrl2.seq")
  Saving fasta file (myfasta.fa) ... 
    converting -- gbphg.gbk
    converting -- gbvrl1.gbk
    converting -- gbvrl2.gbk
  done

=== スクリプト生成

䜜業手順をスクリプト化しお保存しおおくこずもできたす。

  bioruby> script
  -- 8< -- 8< -- 8< --  Script  -- 8< -- 8< -- 8< --
  bioruby> seq = getseq("gbphg.seq")
  bioruby> p seq
  bioruby> p seq.translate
  bioruby> script
  -- >8 -- >8 -- >8 --  Script  -- >8 -- >8 -- >8 --
  Saving script (script.rb) ... done

生成された script.rb は以䞋のようになりたす。

  #!/usr/bin/env bioruby
  
  seq = getseq("gbphg.seq")
  p seq
  p seq.translate

このスクリプトは bioruby コマンドで実行するこずができたす。

  % bioruby script.rb

=== 簡易シェル機胜

--- cd(dir)

カレントディレクトリを倉曎したす。

  bioruby> cd "/tmp"
  "/tmp"

ホヌムディレクトリに戻るには匕数を぀けずに cd を実行したす。

  bioruby> cd
  "/home/k"

--- pwd

カレントディレクトリを衚瀺したす。

  bioruby> pwd
  "/home/k"

--- dir

カレントディレクトリのファむルを䞀芧衚瀺したす。

  bioruby> dir
     UGO  Date                                 Byte  File
  ------  ----------------------------  -----------  ------------
   40700  Tue Dec 06 07:07:35 JST 2005         1768  "Desktop"
   40755  Tue Nov 29 16:55:20 JST 2005         2176  "bin"
  100644  Sat Oct 15 03:01:00 JST 2005     42599518  "gbphg.seq"
  (略)

  bioruby> dir "gbphg.seq"
     UGO  Date                                 Byte  File
  ------  ----------------------------  -----------  ------------
  100644  Sat Oct 15 03:01:00 JST 2005     42599518  "gbphg.seq"

--- head(file, lines = 10)

テキストファむルやオブゞェクトの先頭 10 行を衚瀺したす。

  bioruby> head "gbphg.seq"
  GBPHG.SEQ            Genetic Sequence Data Bank
                            October 15 2005
  
                  NCBI-GenBank Flat File Release 150.0
  
                            Phage Sequences         
  
      2713 loci,    16892737 bases, from     2713 reported sequences

衚瀺する行数を指定するこずもできたす。

  bioruby> head "gbphg.seq", 2
  GBPHG.SEQ            Genetic Sequence Data Bank
                            October 15 2005

テキストの入っおいる倉数の先頭を芋るこずもできたす。

  bioruby> entry = getent("gbphg.seq")
  bioruby> head entry, 2
  GBPHG.SEQ            Genetic Sequence Data Bank
                            October 15 2005

--- disp(obj)

テキストファむルやオブゞェクトの䞭身をペヌゞャヌで衚瀺したす。
ここで䜿甚するペヌゞャヌは pager コマンドで倉曎するこずができたす埌述。

  bioruby> disp "gbphg.seq"
  bioruby> disp entry
  bioruby> disp [1, 2, 3] * 4

=== 倉数

--- ls

セッション䞭に䜜成した倉数オブゞェクトの䞀芧を衚瀺したす。

  bioruby> ls
  ["entry", "seq"]

  bioruby> a = 123
  ["a", "entry", "seq"]

--- rm(symbol)

倉数を消去したす。

  bioruby> rm "a"

  bioruby> ls
  ["entry", "seq"]

--- savefile(filename, object)

倉数に保存されおいる内容をテキストファむルに保存したす。

  bioruby> savefile "testfile.txt", entry
  Saving data (testfile.txt) ... done

  bioruby> disp "testfile.txt"

=== 各皮蚭定

氞続化の仕組みずしお BioRuby シェル終了時に session ディレクトリ内に
ヒストリ、オブゞェクト、個人の蚭定が保存され、次回起動時に自動的に
読み蟌たれたす。

--- config

BioRuby シェルの各皮蚭定を衚瀺したす。

  bioruby> config
  message = "...BioRuby in the shell..."
  marshal = [4, 8]
  color   = false
  pager   = nil
  echo    = false

echo 衚瀺するかどうかを切り替えたす。on の堎合は、puts や p などを
぀けなくおも評䟡した倀が画面に衚瀺されたす。
irb コマンドの堎合は初期蚭定が on になっおいたすが、bioruby コマンドでは
長い配列や゚ントリなど長倧な文字列を扱うこずが倚いため、初期蚭定では
off にしおいたす。

  bioruby> config :echo
  Echo on
    ==> nil

  bioruby> config :echo
  Echo off

コドン衚など、可胜な堎合にカラヌ衚瀺するかどうかを切り替えたす。
カラヌ衚瀺の堎合、プロンプトにも色が぀きたすので刀別できたす。

  bioruby> config :color
  bioruby> codontable
  (色付き)

実行するたびに蚭定が切り替わりたす。

  bioruby> config :color
  bioruby> codontable
  (色なし)

BioRuby シェル起動時に衚瀺されるスプラッシュメッセヌゞを違う文字列に
倉曎したす。䜕の解析プロゞェクト甚のディレクトリかを指定しおおくのも
よいでしょう。

  bioruby> config :message, "Kumamushi genome project"
  
  K u m a m u s h i   g e n o m e   p r o j e c t
  
    Version : BioRuby 0.8.0 / Ruby 1.8.4

デフォルトの文字列に戻すには、匕数なしで実行したす。

  bioruby> config :message

BioRuby シェル起動時に衚瀺されるスプラッシュメッセ−ゞを
アニメヌション衚瀺するかどうかを切り替えたす。
こちらも実行するたびに蚭定が切り替わりたす。

  bioruby> config :splash
  Splash on

--- pager(command)

disp コマンドで実際に利甚するペヌゞャヌを切り替えたす。

  bioruby> pager "lv"
  Pager is set to 'lv'

  bioruby> pager "less -S"
  Pager is set to 'less -S'

ペヌゞャヌを䜿甚しない蚭定にする堎合は匕数なしで実行したす。

  bioruby> pager
  Pager is set to 'off'

ペヌゞャヌが off の時に匕数なしで実行するず環境倉数 PAGER の倀を利甚したす。

  bioruby> pager
  Pager is set to 'less'

=== 遺䌝子アスキヌアヌト

--- doublehelix(sequence)

DNA 配列をアスキヌアヌトで衚瀺するオマケ機胜がありたす。
適圓な塩基配列 seq を二重螺旋っぜく衚瀺しおみたしょう。

  bioruby> dna = getseq("atgc" * 10).randomize
  bioruby> doublehelix dna
       ta
      t--a
     a---t
    a----t
   a----t
  t---a
  g--c
   cg
   gc
  a--t
  g---c
   c----g
    c----g
  (略)

=== 遺䌝子音楜

--- midifile(midifile, sequence)

DNA 配列を MIDI ファむルに倉換するオマケ機胜がありたす。
適圓な塩基配列 seq を䜿っお生成した midifile.mid を
MIDI プレむダヌで挔奏しおみたしょう。

  bioruby> midifile("midifile.mid", seq)
  Saving MIDI file (midifile.mid) ... done

以䞊で BioRuby シェルの解説を終わり、以䞋では BioRuby ラむブラリ自䜓の
解説を行いたす。


== 塩基・アミノ酞配列を凊理する (Bio::Sequence クラス)

Bio::Sequence クラスは、配列に察する様々な操䜜を行うこずができたす。
簡単な䟋ずしお、短い塩基配列 atgcatgcaaaa を䜿っお、盞補配列ぞの倉換、
郚分配列の切り出し、塩基組成の蚈算、アミノ酞ぞの翻蚳、分子量蚈算などを
行なっおみたす。アミノ酞ぞの翻蚳では、必芁に応じお䜕塩基目から翻蚳を開
始するかフレヌムを指定したり、codontable.rb で定矩されおいるコドンテヌ
ブルの䞭から䜿甚するものを指定したりする事ができたすコドンテヌブルの
番号は ((<URL:http://www.ncbi.nlm.nih.gov/Taxonomy/Utils/wprintgc.cgi>))
を参照。

  #!/usr/bin/env ruby
  
  require 'bio'
  
  seq = Bio::Sequence::NA.new("atgcatgcaaaa")
  
  puts seq                            # 元の配列
  puts seq.complement                 # 盞補配列 (Bio::Sequence::NA)
  puts seq.subseq(3,8)                # 3 塩基目から 8 塩基目たで
  
  p seq.gc_percent                    # GC 塩基の割合 (Integer)
  p seq.composition                   # 党塩基組成 (Hash)
  
  puts seq.translate                  # 翻蚳配列 (Bio::Sequence::AA)
  puts seq.translate(2)               # 文字目から翻蚳普通はから
  puts seq.translate(1,9)             # 番のコドンテヌブルを䜿甚

  p seq.translate.codes               # アミノ酞を文字コヌドで衚瀺 (Array)
  p seq.translate.names               # アミノ酞を名前で衚瀺 (Array)
  p seq.translate.composition         # アミノ酞組成 (Hash)
  p seq.translate.molecular_weight    # 分子量を蚈算 (Float)
  
  puts seq.complement.translate       # 盞補配列の翻蚳

print, puts, p は内容を画面に衚瀺するための Ruby 暙準メ゜ッドです。
基本ずなる print ず比べお、puts は改行を自動で぀けおくれる、
p は文字列や数字以倖のオブゞェクトも人間が芋やすいように衚瀺しおくれる、
ずいう特城がありたすので適宜䜿い分けたす。さらに、

  require 'pp'

ずすれば䜿えるようになる pp メ゜ッドは、p よりも衚瀺が芋やすくなりたす。

塩基配列は Bio::Sequence::NA クラスの、アミノ酞配列は Bio::Sequence::AA
クラスのオブゞェクトになりたす。それぞれ Bio::Sequence クラスを継承し
おいるため、倚くのメ゜ッドは共通です。

さらに Bio::Sequence::NA, AA クラスは Ruby の String クラスを継承しおいるので
String クラスが持぀メ゜ッドも䜿う事ができたす。䟋えば郚分配列を切り出すには
Bio::Sequence クラスの subseq(from,to) メ゜ッドの他に、String クラスの
[] メ゜ッドを䜿うこずもできたす。

Ruby の文字列は 1 文字目を 0 番目ずしお数える点には泚意が必芁です。たずえば、

  puts seq.subseq(1, 3)
  puts seq[0, 3]

はどちらも seq の最初の文字 atg を衚瀺したす。

このように、String のメ゜ッドを䜿う堎合は、生物孊で普通䜿甚される 1 文字目を
1 番目ずしお数えた数字からは 1 を匕く必芁がありたすsubseq メ゜ッドは
これを内郚でやっおいたす。たた、from, to のどちらかでも 0 以䞋の堎合は
䟋倖が発生するようになっおいたす。

ここたでの凊理を BioRuby シェルで詊すず以䞋のようになりたす。

  # 次の行は seq = seq("atgcatgcaaaa") でもよい
  bioruby> seq = Bio::Sequence::NA.new("atgcatgcaaaa")
  # 生成した配列を衚瀺
  bioruby> puts seq
  atgcatgcaaaa
  # 盞補配列を衚瀺
  bioruby> puts seq.complement
  ttttgcatgcat
  # 郚分配列を衚瀺塩基目から塩基目たで
  bioruby> puts seq.subseq(3,8)
  gcatgc
  # 配列の GC% を衚瀺
  bioruby> p seq.gc_percent
  33
  # 配列の組成を衚瀺
  bioruby> p seq.composition
  {"a"=>6, "c"=>2, "g"=>2, "t"=>2}
  # アミノ酞配列ぞの翻蚳
  bioruby> puts seq.translate
  MHAK
  # 塩基を開始塩基ずしお翻蚳
  bioruby> puts seq.translate(2)
  CMQ
  # 番のコドンテヌブルを䜿甚しお翻蚳
  bioruby> puts seq.translate(1,9)
  MHAN
  # 翻蚳されたアミノ酞配列を文字コヌドで衚瀺
  bioruby> p seq.translate.codes
  ["Met", "His", "Ala", "Lys"]
  # 翻蚳されたアミノ酞配列をアミノ酞の名前で衚瀺
  bioruby> p seq.translate.names
  ["methionine", "histidine", "alanine", "lysine"]
  # 翻蚳されたアミノ酞配列の組成を衚瀺
  bioruby> p seq.translate.composition
  {"K"=>1, "A"=>1, "M"=>1, "H"=>1}
  # 翻蚳されたアミノ酞配列の分子量を衚瀺
  bioruby> p seq.translate.molecular_weight
  485.605
  # 盞補配列を翻蚳
  bioruby> puts seq.complement.translate
  FCMH
  # 郚分配列塩基目から塩基目たで
  bioruby> puts seq.subseq(1, 3)
  atg
  # 郚分配列塩基目から塩基目たで
  bioruby> puts seq[0, 3]
  atg

window_search(window_size, step_size) メ゜ッドを䜿うず、配列に察しおりィ
ンドりをずらしながらそれぞれの郚分配列に察する凊理を行うこずができたす。
Ruby の特長のひず぀である「ブロック」によっお、「それぞれに察する凊理」を
簡朔か぀明瞭に曞くこずが可胜です。以䞋の䟋では、subseq ずいう倉数にそれぞれ
郚分配列を代入しながらブロックを繰り返し実行するこずになりたす。

* 100 塩基ごずに1塩基ず぀ずらしながら平均 GC% を蚈算しお衚瀺する

    seq.window_search(100) do |subseq|
      puts subseq.gc_percent
    end

ブロックの䞭で受け取る郚分配列も、元ず同じ Bio::Sequence::NA たたは 
Bio::Sequence::AA クラスのオブゞェクトなので、配列クラスの持぀党おのメ
゜ッドを実行するこずができたす。

たた、番目の匕数に移動幅を指定するこずが出来るようになっおいるので、

* コドン単䜍でずらしながら 15 塩基を 5 残基のペプチドに翻蚳しお衚瀺する

    seq.window_search(15, 3) do |subseq|
      puts subseq.translate
    end

ずいったこずができたす。さらに移動幅に満たない右端の郚分配列をメ゜ッド
自䜓の返り倀ずしお戻すようになっおいるので、

* ゲノム配列を 10000bp ごずにブツ切りにしお FASTA フォヌマットに敎圢、
  このずき末端 1000bp はオヌバヌラップさせ、10000bp に満たない 3' 端は
  別途受け取っお衚瀺する

    i = 1
    remainder = seq.window_search(10000, 9000) do |subseq|
      puts subseq.to_fasta("segment #{i}", 60)
      i += 1
    end
    puts remainder.to_fasta("segment #{i}", 60)

のような事もわりず簡単にできたす。

りィンドりの幅ず移動幅を同じにするずオヌバヌラップしないりィンドりサヌ
チができるので、

* コドン頻床を数える

    codon_usage = Hash.new(0)
    seq.window_search(3, 3) do |subseq|
      codon_usage[subseq] += 1
    end

* 10 残基ず぀分子量を蚈算

    seq.window_search(10, 10) do |subseq|
      puts subseq.molecular_weight
    end

ずいった応甚も考えられたす。

実際には Bio::Sequence::NA オブゞェクトはファむルから読み蟌んだ文字列か
ら生成したり、デヌタベヌスから取埗したものを䜿ったりしたす。たずえば、

    #!/usr/bin/env ruby
    
    require 'bio'
    
    input_seq = ARGF.read       # 匕数で䞎えられたファむルの党行を読み蟌む
    
    my_naseq = Bio::Sequence::NA.new(input_seq)
    my_aaseq = my_naseq.translate
    
    puts my_aaseq

このプログラムを na2aa.rb ずしお、以䞋の塩基配列

      gtggcgatctttccgaaagcgatgactggagcgaagaaccaaagcagtgacatttgtctg
      atgccgcacgtaggcctgataagacgcggacagcgtcgcatcaggcatcttgtgcaaatg
      tcggatgcggcgtga

を曞いたファむル my_naseq.txt を読み蟌んで翻蚳するず

    % ./na2aa.rb my_naseq.txt
    VAIFPKAMTGAKNQSSDICLMPHVGLIRRGQRRIRHLVQMSDAA*

のようになりたす。ちなみに、このくらいの䟋なら短くするず行で曞けたす。

    % ruby -r bio -e 'p Bio::Sequence::NA.new($<.read).translate' my_naseq.txt

しかし、いちいちファむルを䜜るのも面倒なので、次はデヌタベヌスから必芁な
情報を取埗しおみたす。


== GenBank のパヌス (Bio::GenBank クラス)

GenBank 圢匏のファむルを甚意しおください手元にない堎合は、
ftp://ftp.ncbi.nih.gov/genbank/ から .seq ファむルをダりンロヌドしたす。

  % wget ftp://ftp.hgc.jp/pub/mirror/ncbi/genbank/gbphg.seq.gz
  % gunzip gbphg.seq.gz
  
たずは、各゚ントリから ID ず説明文、配列を取り出しお FASTA 圢匏に倉換しお
みたしょう。

Bio::GenBank::DELIMITER は GenBank クラスで定矩されおいる定数で、
デヌタベヌスごずに異なる゚ントリの区切り文字たずえば GenBank の堎合は //
を芚えおいなくおも良いようになっおいたす。

    #!/usr/bin/env ruby
    
    require 'bio'
    
    while entry = gets(Bio::GenBank::DELIMITER)
      gb = Bio::GenBank.new(entry)      # GenBank オブゞェクト
    
      print ">#{gb.accession} "         # ACCESSION 番号
      puts gb.definition                # DEFINITION 行
      puts gb.naseq                     # 塩基配列Sequence::NA オブゞェクト
    end

しかし、この曞き方では GenBank ファむルのデヌタ構造に䟝存しおいたす。
ファむルからのデヌタ入力を扱うクラス Bio::FlatFile を䜿甚するこずで、
以䞋のように区切り文字などを気にせず曞くこずができたす。

    #!/usr/bin/env ruby
    
    require 'bio'
    
    ff = Bio::FlatFile.new(Bio::GenBank, ARGF)
    ff.each_entry do |gb|
      definition = "#{gb.accession} #{gb.definition}"
      puts gb.naseq.to_fasta(definition, 60)
    end

圢匏の違うデヌタ、たずえばFASTAフォヌマットのファむルを読み蟌むずきでも、

    #!/usr/bin/env ruby
    
    require 'bio'
    
    ff = Bio::FlatFile.new(Bio::FastaFormat, ARGF)
    ff.each_entry do |f|
      puts "definition : " + f.definition
      puts "nalen      : " + f.nalen.to_s
      puts "naseq      : " + f.naseq
    end

のように、同じような曞き方で枈たせられたす。

さらに、各 Bio::DB クラスの open メ゜ッドで同様のこずができたす。たずえば、

    #!/usr/bin/env ruby
    
    require 'bio'
    
    ff = Bio::GenBank.open("gbvrl1.seq")
    ff.each_entry do |gb|
      definition = "#{gb.accession} #{gb.definition}"
      puts gb.naseq.to_fasta(definition, 60)    
    end

などず曞くこずができたすただし、この曞き方はあたり䜿われおいたせん)。

次に、GenBank の耇雑な FEATURES の䞭をパヌスしお必芁な情報を取り出したす。
たずは /tranlation="アミノ酞配列" ずいう Qualifier がある堎合だけ
アミノ酞配列を抜出しお衚瀺しおみたす。

    #!/usr/bin/env ruby

    require 'bio'
    
    ff = Bio::FlatFile.new(Bio::GenBank, ARGF)

    # GenBank の゚ントリごずに
    ff.each_entry do |gb|
    
      # FEATURES の芁玠を䞀぀ず぀凊理
      gb.features.each do |feature|

        # Feature に含たれる Qualifier を党おハッシュに倉換
        hash = feature.to_hash

        # Qualifier に translation がある堎合だけ
        if hash['translation']
          # ゚ントリのアクセッション番号ず翻蚳配列を衚瀺
          puts ">#{gb.accession}
          puts hash['translation']
        end
      end
    end

さらに、Feature のポゞションに曞かれおいる情報から゚ントリの塩基配列を
スプラむシングし、それを翻蚳したものず /translation= に曞かれおいた配列を
䞡方衚瀺しお比べおみたしょう。

    #!/usr/bin/env ruby
    
    require 'bio'
    
    ff = Bio::FlatFile.new(Bio::GenBank, ARGF)

    # GenBank の゚ントリごずに
    ff.each_entry do |gb|

      # ACCESSION 番号ず生物皮名を衚瀺
      puts "### #{gb.accession} - #{gb.organism}"
    
      # FEATURES の芁玠を䞀぀ず぀凊理
      gb.features.each do |feature|

        # Feature の position (join ...など) を取り出す
        position = feature.position

        # Feature に含たれる Qualifier を党おハッシュに倉換
        hash = feature.to_hash

        # /translation= がなければスキップ
        next unless hash['translation']

        # /gene=, /product= などの Qualifier から遺䌝子名などの情報を集める
        gene_info = [
          hash['gene'], hash['product'], hash['note'], hash['function']
        ].compact.join(', ')
        puts "## #{gene_info}"

        # 塩基配列position の情報によっおスプラむシング
        puts ">NA splicing('#{position}')"
        puts gb.naseq.splicing(position)

        # アミノ酞配列スプラむシングした塩基配列から翻蚳
        puts ">AA translated by splicing('#{position}').translate"
        puts gb.naseq.splicing(position).translate

        # アミノ酞配列/translation= に曞かれおいたのもの
        puts ">AA original translation"
        puts hash['translation']
      end
    end

もし、䜿甚されおいるコドンテヌブルがデフォルト (universal) ず違ったり、
最初のコドンが "atg" 以倖だったり、セレノシステむンが含たれおいたり、
あるいは BioRuby にバグがあれば、䞊の䟋で衚瀺される぀のアミノ酞配列は
異なる事になりたす。

この䟋で䜿甚されおいる Bio::Sequence#splicing メ゜ッドは、GenBank, EMBL,
DDBJ フォヌマットで䜿われおいる Location の衚蚘を元に、塩基配列から
郚分配列を切り出す匷力なメ゜ッドです。

この splicing メ゜ッドの匕数には GenBank 等の Location の文字列以倖に
BioRuby の Bio::Locations オブゞェクトを枡すこずも可胜ですが、
通垞は芋慣れおいる Location 文字列の方が分かりやすいかも知れたせん。
Location 文字列のフォヌマットや Bio::Locations に぀いお詳しく知りたい堎合は 
BioRuby の bio/location.rb を芋おください。

* GenBank 圢匏のデヌタの Feature で䜿われおいた Location 文字列の䟋

    naseq.splicing('join(2035..2050,complement(1775..1818),13..345')

* あらかじめ Locations オブゞェクトに倉換しおから枡しおもよい

    locs = Bio::Locations.new('join((8298.8300)..10206,1..855)')
    naseq.splicing(locs)

ちなみに、アミノ酞配列 (Bio::Sequence::AA) に぀いおも splicing メ゜ッド
を䜿甚しお郚分配列を取り出すこずが可胜です。

* アミノ酞配列の郚分配列を切り出すシグナルペプチドなど

    aaseq.splicing('21..119')


=== GenBank 以倖のデヌタベヌス

BioRuby では、GenBank 以倖のデヌタベヌスに぀いおも基本的な扱い方は同じで、
デヌタベヌスの゚ントリ分の文字列を察応するデヌタベヌスのクラスに枡せば、
パヌスされた結果がオブゞェクトになっお返っおきたす。

デヌタベヌスのフラットファむルから゚ントリず぀取り出しおパヌスされた
オブゞェクトを取り出すには、先にも出おきた Bio::FlatFile を䜿いたす。
Bio::FlatFile.new の匕数にはデヌタベヌスに察応する BioRuby でのクラス
名 (Bio::GenBank や Bio::KEGG::GENES など) を指定したす。

    ff = Bio::FlatFile.new(Bio::デヌタベヌスクラス名, ARGF)

しかし、すばらしいこずに、実は FlatFile クラスはデヌタベヌスの自動認識が
できたすので、

    ff = Bio::FlatFile.auto(ARGF)

を䜿うのが䞀番簡単です。

    #!/usr/bin/env ruby
    
    require 'bio'
    
    ff = Bio::FlatFile.auto(ARGF)

    ff.each_entry do |entry|
      p entry.entry_id          # ゚ントリの ID
      p entry.definition        # ゚ントリの説明文
      p entry.seq               # 配列デヌタベヌスの堎合
    end

    ff.close

さらに、開いたデヌタベヌスの閉じ忘れをなくすためには Ruby のブロックを
掻甚しお以䞋のように曞くのがよいでしょう。

    #!/usr/bin/env ruby
    
    require 'bio'
    
    Bio::FlatFile.auto(ARGF) do |ff|
      ff.each_entry do |entry|
        p entry.entry_id          # ゚ントリの ID
        p entry.definition        # ゚ントリの説明文
        p entry.seq               # 配列デヌタベヌスの堎合
      end
    end

パヌスされたオブゞェクトから、゚ントリ䞭のそれぞれの郚分を取り出すための
メ゜ッドはデヌタベヌス毎に異なりたす。よくある項目に぀いおは

  * entry_id メ゜ッド → ゚ントリの ID 番号が返る
  * definition メ゜ッド → ゚ントリの定矩行が返る
  * reference メ゜ッド → リファレンスオブゞェクトが返る
  * organism メ゜ッド → 生物皮名
  * seq や naseq や aaseq メ゜ッド → 察応する配列オブゞェクトが返る

などのように共通化しようずしおいたすが、党おのメ゜ッドが実装されおいるわ
けではありたせん共通化の指針は bio/db.rb 参照。たた、现かい郚分は各
デヌタベヌスパヌザ毎に異なるので、それぞれのドキュメントに埓いたす。

原則ずしお、メ゜ッド名が耇数圢の堎合は、オブゞェクトが配列ずしお返りたす。
たずえば references メ゜ッドを持぀クラスは耇数の Bio::Reference オブゞェ
クトを Array にしお返したすが、別のクラスでは単数圢の reference メ゜ッド
しかなく、぀の Bio::Reference オブゞェクトだけを返す、ずいった感じです。

== PDB のパヌス (Bio::PDB クラス)

Bio::PDB は、PDB 圢匏を読み蟌むためのクラスです。PDB デヌタベヌスは
PDB, mmCIF, XML (PDBML) の皮類のフォヌマットで提䟛されおいたすが、
これらのうち BioRuby で察応しおいるのは PDB フォヌマットです。

PDB フォヌマットの仕様は、以䞋の Protein Data Bank Contents Guide を
参照しおください。

* ((<URL:http://www.rcsb.org/pdb/file_formats/pdb/pdbguide2.2/guide2.2_frame.html>))

=== PDB デヌタの読み蟌み

PDB の゚ントリが 1bl8.pdb ずいうファむルに栌玍されおいる堎合は、
Ruby のファむル読み蟌み機胜を䜿っお

  entry = File.read("1bl8.pdb")

のようにするこずで、゚ントリの内容を文字列ずしお entry ずいう倉数に
代入するこずができたす。゚ントリの内容をパヌスするには

  pdb = Bio::PDB.new(entry)

ずしたす。これで゚ントリが Bio::PDB オブゞェクトずなり、任意のデヌタを
取り出せるようになりたす。

PDB フォヌマットは Bio::FlatFile による自動認識も可胜ですが、珟圚は
ファむルに耇数゚ントリを含む堎合には察応しおいたせん。
Bio::FlatFile を䜿っお゚ントリ分だけ読み蟌むには、

  pdb = Bio::FlatFile.auto("1bl8.pdb") { |ff| ff.next_entry }

ずしたす。どちらの方法でも倉数 pdb には同じ結果が埗られたす。

=== オブゞェクトの階局構造

各 PDB ゚ントリは、英数字文字からなる ID が付けられおいたす。
Bio::PDB オブゞェクトから ID を取リ出すには entry_id メ゜ッドを䜿いたす。

  p pdb.entry_id   # => "1BL8"

゚ントリの抂芁に関する情報も察応するメ゜ッドで取り出すこずができたす。

  p pdb.definition # => "POTASSIUM CHANNEL (KCSA) FROM STREPTOMYCES LIVIDANS"
  p pdb.keywords   # => ["POTASSIUM CHANNEL", "INTEGRAL MEMBRANE PROTEIN"]

他に、登録者や文献、実隓方法などの情報も取埗できたすそれぞれ
authors, jrnl, method メ゜ッド。

PDB デヌタは、基本的には行が぀のレコヌドを圢成しおいたす。
行に入りきらないデヌタを耇数行に栌玍する continuation ずいう
仕組みも甚意されおいたすが、基本は行レコヌドです。

各行の先頭文字がその行のデヌタの皮類を瀺す名前レコヌドになりたす。
BioRuby では、HEADER レコヌドに察しおは Bio::PDB::Record::HEADER クラス、
TITLE レコヌドに察しおは Bio::PDB::Record::TITLE クラス、ずいうように
基本的には各レコヌドに察応するクラスを぀甚意しおいたす。
ただし、REMARK ず JRNL レコヌドに関しおは、それぞれ耇数のフォヌマットが
存圚するため、耇数のクラスを甚意しおいたす。

各レコヌドにアクセスするもっずも単玔な方法は record メ゜ッドです。

  pdb.record("HELIX")

のようにするず、その PDB ゚ントリに含たれる党おの HELIX レコヌドを
Bio::PDB::Record::HELIX クラスのオブゞェクトの配列ずしお取埗できたす。

このこずをふたえ、以䞋では、PDB ゚ントリのメむンな内容である立䜓構造に
関するデヌタ構造の扱い方を芋おいきたす。

==== 原子: Bio::PDB::Record::ATOM, Bio::PDB::Record::HETATM クラス

PDB ゚ントリは、タンパク質、栞酞DNA,RNAやその他の分子の立䜓構造、
具䜓的には原子の次元座暙を含んでいたす。

タンパク質たたは栞酞の原子の座暙は、ATOM レコヌドに栌玍されおいたす。
察応するクラスは、Bio::PDB::Record::ATOM クラスです。

タンパク質・栞酞以倖の原子の座暙は、HETATM レコヌドに栌玍されおいたす。
察応するクラスは、Bio::PDB::Record::HETATM クラスです。

HETATM クラスは ATOM クラスを継承しおいるため、ATOM ず HETATM の
メ゜ッドの䜿い方はたったく同じです。

==== アミノ酞残基たたは塩基: Bio::PDB::Residue クラス

アミノ酞たたは塩基単䜍で原子をたずめたのが Bio::PDB::Residue です。
Bio::PDB::Residue オブゞェクトは、個以䞊の Bio::PDB::Record::ATOM
オブゞェクトを含みたす。

==== 化合物: Bio::PDB::Heterogen クラス

タンパク質・栞酞以倖の分子の原子は、基本的には分子単䜍で
Bio::PDB::Heterogen にたずめられおいたす。
Bio::PDB::Heterogen オブゞェクトは、個以䞊の
Bio::PDB::Record::HETATM オブゞェクトを含みたす。

==== 鎖チェむン: Bio::PDB::Chain クラス

Bio::PDB::Chain は、耇数の Bio::PDB::Residue オブゞェクトからなる
個のタンパク質たたは栞酞ず、耇数の Bio::PDB::Heterogen オブゞェクト
からなる個以䞊のそれ以倖の分子を栌玍するデヌタ構造です。

なお、倧半の堎合は、タンパク質・栞酞Bio::PDB::Residueか、
それ以倖の分子Bio::PDB::Heterogenのどちらか䞀皮類しか持ちたせん。
Chain をひず぀しか含たない PDB ゚ントリでは䞡方持぀堎合があるようです。

各 Chain には、英数字文字の ID が付いおいたすChain をひず぀しか
含たない PDB ゚ントリの堎合は空癜文字のずきもありたす。

==== モデル: Bio::PDB::Model

個以䞊の Bio::PDB::Chain が集たったものが Bio::PDB::Model です。
線結晶構造の堎合、Model は通垞個だけですが、NMR 構造の堎合、
耇数の Model が存圚するこずがありたす。
耇数の Model が存圚する堎合、各 Model にはシリアル番号が付きたす。

そしお、個以䞊の Model が集たったものが、Bio::PDB オブゞェクトになりたす。

=== 原子にアクセスするメ゜ッド

Bio::PDB#each_atom は党おの ATOM を順番に個ず぀蟿るむテレヌタです。

  pdb.each_atom do |atom|
    p atom.xyz
  end

この each_atom メ゜ッドは Model, Chain, Residue オブゞェクトに察しおも
䜿甚するこずができ、それぞれ、その Model, Chain, Residue 内郚のすべおの
ATOM をたどるむテレヌタずしお働きたす。

Bio::PDB#atoms は党おの ATOM を配列ずしお返すメ゜ッドです。

  p pdb.atoms.size        # => 2820 個の ATOM が含たれるこずがわかる

each_atom ず同様に atoms メ゜ッドも Model, Chain, Residue オブゞェクト
に察しお䜿甚可胜です。

  pdb.chains.each do |chain|
    p chain.atoms.size    # => 各 Chain 毎の ATOM 数が衚瀺される
  end

Bio::PDB#each_hetatm は、党おの HETATM を順番に個ず぀蟿るむテレヌタです。

  pdb.each_hetatm do |hetatm|
    p hetatm.xyz
  end

Bio::PDB#hetatms 党おの HETATM を配列ずしお返すのは hetatms メ゜ッドです。

  p pdb.hetatms.size

これらも atoms の堎合ず同様に、Model, Chain, Heterogen オブゞェクトに
察しお䜿甚可胜です。

==== Bio::PDB::Record::ATOM, Bio::PDB::Record::HETATM クラスの䜿い方

ATOM はタンパク質・栞酞DNA・RNAを構成する原子、HETATM はそれ以倖の
原子を栌玍するためのクラスですが、HETATM が ATOM クラスを継承しおいるため
これらのクラスでメ゜ッドの䜿い方はたったく同じです。

  p atom.serial       # シリアル番号
  p atom.name         # 名前
  p atom.altLoc       # Alternate location indicator
  p atom.resName      # アミノ酞・塩基名たたは化合物名
  p atom.chainID      # Chain の ID
  p atom.resSeq       # アミノ酞残基のシヌケンス番号
  p atom.iCode        # Code for insertion of residues
  p atom.x            # X 座暙
  p atom.y            # Y 座暙
  p atom.z            # Z 座暙
  p atom.occupancy    # Occupancy
  p atom.tempFactor   # Temperature factor
  p atom.segID        # Segment identifier
  p atom.element      # Element symbol
  p atom.charge       # Charge on the atom

これらのメ゜ッド名は、原則ずしお Protein Data Bank Contents Guide の
蚘茉に合わせおいたす。メ゜ッド名に resName や resSeq ずいった蚘名法
CamelCaseを採甚しおいるのはこのためです。
それぞれのメ゜ッドの返すデヌタの意味は、仕様曞を参考にしおください。

この他にも、いく぀かの䟿利なメ゜ッドを甚意しおいたす。
xyz メ゜ッドは、座暙を次元のベクトルずしお返すメ゜ッドです。
このメ゜ッドは、Ruby の Vector クラスを継承しお次元のベクトルに
特化させた Bio::PDB::Coordinate クラスのオブゞェクトを返したす
泚: Vectorを継承したクラスを䜜成するのはあたり掚奚されないようなので、
将来、Vectorクラスのオブゞェクトを返すよう仕様倉曎するかもしれたせん。

  p atom.xyz

ベクトルなので、足し算、匕き算、内積などを求めるこずができたす。

  # 原子間の距離を求める
  p (atom1.xyz - atom2.xyz).r  # r はベクトルの絶察倀を求めるメ゜ッド

  # 内積を求める
  p atom1.xyz.inner_product(atom2.xyz)

他には、その原子に察応する TER, SIGATM, ANISOU レコヌドを取埗する
ter, sigatm, anisou メ゜ッドも甚意されおいたす。

=== アミノ酞残基 (Residue) にアクセスするメ゜ッド

Bio::PDB#each_residue は、党おの Residue を順番に蟿るむテレヌタです。
each_residue メ゜ッドは、Model, Chain オブゞェクトに察しおも
䜿甚するこずができ、それぞれの Model, Chain に含たれる党おの
Residue を蟿るむテレヌタずしお働きたす。

  pdb.each_residue do |residue|
    p residue.resName
  end

Bio::PDB#residues は、党おの Residue を配列ずしお返すメ゜ッドです。
each_residue ず同様に、Model, Chain オブゞェクトに察しおも䜿甚可胜です。

  p pdb.residues.size

=== 化合物 (Heterogen) にアクセスするメ゜ッド

Bio::PDB#each_heterogen は党おの Heterogen を順番にたどるむテレヌタ、
Bio::PDB#heterogens は党おの Heterogen を配列ずしお返すメ゜ッドです。

  pdb.each_heterogen do |heterogeon|
    p heterogen.resName
  end

  p pdb.heterogens.size

これらのメ゜ッドも Residue ず同様に Model, Chain オブゞェクトに察しおも
䜿甚可胜です。

=== Chain, Model にアクセスするメ゜ッド

同様に、Bio::PDB#each_chain は党おの Chain を順番にたどるむテレヌタ、
Bio::PDB#chains は党おの Chain を配列ずしお返すメ゜ッドです。
これらのメ゜ッドは Model オブゞェクトに察しおも䜿甚可胜です。

Bio::PDB#each_model は党おの Model を順番にたどるむテレヌタ、
Bio::PDB#models は党おの Model を配列ずしお返すメ゜ッドです。

=== PDB Chemical Component Dictionary のデヌタの読み蟌み

Bio::PDB::ChemicalComponent クラスは、PDB Chemical Component Dictionary
旧名称 HET Group Dictionaryのパヌサです。

PDB Chemical Component Dictionary に぀いおは以䞋のペヌゞを参照しおください。

  * ((<URL:http://deposit.pdb.org/cc_dict_tut.html>))

デヌタは以䞋でダりンロヌドできたす。

  * ((<URL:http://deposit.pdb.org/het_dictionary.txt>))

このクラスは、RESIDUE から始たっお空行で終わる゚ントリをパヌスしたす
PDB フォヌマットにのみ察応しおいたす。

Bio::FlatFile によるファむル圢匏自動刀別に察応しおいたす。
このクラス自䜓は ID から化合物を怜玢したりする機胜は持っおいたせん。
br_bioflat.rb によるむンデックス䜜成には察応しおいたすので、
必芁ならそちらを䜿甚しおください。

  Bio::FlatFile.auto("het_dictionary.txt") |ff|
    ff.each do |het|
      p het.entry_id  # ID
      p het.hetnam    # HETNAM レコヌド化合物の名称
      p het.hetsyn    # HETSYM レコヌド化合物の別名の配列
      p het.formul    # FORMUL レコヌド化合物の組成匏
      p het.conect    # CONECT レコヌド
    end
  end

最埌の conect メ゜ッドは、化合物の結合を Hash ずしお返したす。
たずえば、゚タノヌルの゚ントリは次のようになりたすが、

  RESIDUE   EOH      9
  CONECT      C1     4 C2   O   1H1  2H1
  CONECT      C2     4 C1  1H2  2H2  3H2
  CONECT      O      2 C1   HO
  CONECT     1H1     1 C1
  CONECT     2H1     1 C1
  CONECT     1H2     1 C2
  CONECT     2H2     1 C2
  CONECT     3H2     1 C2
  CONECT      HO     1 O
  END
  HET    EOH              9
  HETNAM     EOH ETHANOL
  FORMUL      EOH    C2 H6 O1

この゚ントリに察しお conect メ゜ッドを呌ぶず

  { "C1"  => [ "C2", "O", "1H1", "2H1" ], 
    "C2"  => [ "C1", "1H2", "2H2", "3H2" ], 
    "O"   => [ "C1", "HO" ], 
    "1H1" => [ "C1" ], 
    "1H2" => [ "C2" ], 
    "2H1" => [ "C1" ], 
    "2H2" => [ "C2" ], 
    "3H2" => [ "C2" ], 
    "HO"  => [ "O" ] }

ずいう Hash を返したす。

ここたでの凊理を BioRuby シェルで詊すず以䞋のようになりたす。

  # PDB ゚ントリ 1bl8 をネットワヌク経由で取埗
  bioruby> ent_1bl8 = getent("pdb:1bl8")
  # ゚ントリの䞭身を確認
  bioruby> head ent_1bl8
  # ゚ントリをファむルに保存
  bioruby> savefile("1bl8.pdb", ent_1bl8)
  # 保存されたファむルの䞭身を確認
  bioruby> disp "data/1bl8.pdb"
  # PDB ゚ントリをパヌス
  bioruby> pdb_1bl8 = flatparse(ent_1bl8)
  # PDB の゚ントリ ID を衚瀺
  bioruby> pdb_1bl8.entry_id
  # getent("pdb:1bl8") しお flatparse する代わりに、以䞋でもOK
  bioruby> obj_1bl8 = getobj("pdb:1bl8")
  bioruby> obj_1bl8.entry_id
  # 各 HETEROGEN ごずに残基名を衚瀺
  bioruby> pdb_1bl8.each_heterogen { |heterogen| p heterogen.resName }

  # PDB Chemical Component Dictionary を取埗
  bioruby> het_dic = open("http://deposit.pdb.org/het_dictionary.txt").read
  # 取埗したファむルのバむト数を確認
  bioruby> het_dic.size
  # 取埗したファむルを保存
  bioruby> savefile("data/het_dictionary.txt", het_dic)
  # ファむルの䞭身を確認
  bioruby> disp "data/het_dictionary.txt"
  # 怜玢のためにむンデックス化し het_dic ずいうデヌタベヌスを䜜成
  bioruby> flatindex("het_dic", "data/het_dictionary.txt")
  # ID が EOH の゚タノヌルの゚ントリを怜玢
  bioruby> ethanol = flatsearch("het_dic", "EOH")
  # 取埗した゚ントリをパヌス
  bioruby> osake = flatparse(ethanol)
  # 原子間の結合テヌブルを衚瀺
  bioruby> sake.conect

== アラむメント (Bio::Alignment クラス)

Bio::Alignment クラスは配列のアラむメントを栌玍するためのコンテナです。
Ruby の Hash や Array に䌌た操䜜が可胜で、BioPerl の Bio::SimpleAlign に
䌌た感じになっおいたす。以䞋に簡単な䜿い方を瀺したす。

  require 'bio'

  seqs = [ 'atgca', 'aagca', 'acgca', 'acgcg' ]
  seqs = seqs.collect{ |x| Bio::Sequence::NA.new(x) }

  # アラむメントオブゞェクトを䜜成
  a = Bio::Alignment.new(seqs)

  # コンセンサス配列を衚瀺
  p a.consensus             # ==> "a?gc?"

  # IUPAC 暙準の曖昧な塩基を䜿甚したコンセンサス配列を衚瀺
  p a.consensus_iupac       # ==> "ahgcr"

  # 各配列に぀いお繰り返す
  a.each { |x| p x }
    # ==>
    #    "atgca"
    #    "aagca"
    #    "acgca"
    #    "acgcg"

  # 各サむトに぀いお繰り返す
  a.each_site { |x| p x }
    # ==>
    #    ["a", "a", "a", "a"]
    #    ["t", "a", "c", "c"]
    #    ["g", "g", "g", "g"]
    #    ["c", "c", "c", "c"]
    #    ["a", "a", "a", "g"]

  # Clustal W を䜿甚しおアラむメントを行う。
  # 'clustalw' コマンドがシステムにむンストヌルされおいる必芁がある。
  factory = Bio::ClustalW.new
  a2 = a.do_align(factory)


== FASTA による盞同性怜玢を行うBio::Fasta クラス

FASTA 圢匏の配列ファむル query.pep に察しお、自分のマシン(ロヌカル)あるいは
むンタヌネット䞊のサヌバ(リモヌト)で FASTA による盞同性怜玢を行う方法です。
ロヌカルの堎合は SSEARCH なども同様に䜿うこずができたす。

=== ロヌカルの堎合

FASTA がむンストヌルされおいるこずを確認しおください。以䞋の䟋では、
コマンド名が fasta34 でパスが通ったディレクトリにむンストヌル
されおいる状況を仮定しおいたす。

* ((<URL:ftp://ftp.virginia.edu/pub/fasta/>))

怜玢察象ずする FASTA 圢匏のデヌタベヌスファむル target.pep ず、FASTA
圢匏の問い合わせ配列がいく぀か入ったファむル query.pep を準備したす。

この䟋では、各問い合わせ配列ごずに FASTA 怜玢を実行し、ヒットした配列の
evalue が 0.0001 以䞋のものだけを衚瀺したす。

    #!/usr/bin/env ruby
    
    require 'bio'
    
    # FASTA を実行する環境オブゞェクトを䜜るssearch などでも良い
    factory = Bio::Fasta.local('fasta34', ARGV.pop)
    
    # フラットファむルを読み蟌み、FastaFormat オブゞェクトのリストにする
    ff = Bio::FlatFile.new(Bio::FastaFormat, ARGF)
    
    # ゚ントリず぀の FastaFormat オブゞェクトに察し
    ff.each do |entry|
      # '>' で始たるコメント行の内容を進行状況がわりに暙準゚ラヌ出力に衚瀺
      $stderr.puts "Searching ... " + entry.definition
   
      # FASTA による盞同性怜玢を実行、結果は Fasta::Report オブゞェクト
      report = factory.query(entry)
    
      # ヒットしたものそれぞれに察し
      report.each do |hit|
        # evalue が 0.0001 以䞋の堎合
        if hit.evalue < 0.0001
          # その evalue ず、名前、オヌバヌラップ領域を衚瀺
          print "#{hit.query_id} : evalue #{hit.evalue}\t#{hit.target_id} at "
          p hit.lap_at
        end
      end
    end

ここで factory は繰り返し FASTA を実行するために、あらかじめ䜜っおおく
実行環境です。

䞊蚘のスクリプトを search.rb ずするず、問い合わせ配列ずデヌタベヌス配列の
ファむル名を匕数にしお、以䞋のように実行したす。

    % ruby search.rb query.pep target.pep > search.out

FASTA コマンドにオプションを䞎えたい堎合、番目の匕数に FASTA の
コマンドラむンオプションを曞いお枡したす。ただし、ktup 倀だけは
メ゜ッドを䜿っお指定するこずになっおいたす。
たずえば ktup 倀を 1 にしお、トップ 10 䜍以内のヒットを埗る堎合の
オプションは、以䞋のようになりたす。

    factory = Bio::Fasta.local('fasta34', 'target.pep', '-b 10')
    factory.ktup = 1

Bio::Fasta#query メ゜ッドなどの返り倀は Bio::Fasta::Report オブゞェクト
です。この Report オブゞェクトから、様々なメ゜ッドで FASTA の出力結果の
ほが党おを自由に取り出せるようになっおいたす。たずえば、ヒットに関する
スコアなどの䞻な情報は、

    report.each do |hit|
      puts hit.evalue           # E-value
      puts hit.sw               # Smith-Waterman スコア (*)
      puts hit.identity         # % identity
      puts hit.overlap          # オヌバヌラップしおいる領域の長さ 
      puts hit.query_id         # 問い合わせ配列の ID
      puts hit.query_def        # 問い合わせ配列のコメント
      puts hit.query_len        # 問い合わせ配列の長さ
      puts hit.query_seq        # 問い合わせ配列
      puts hit.target_id        # ヒットした配列の ID
      puts hit.target_def       # ヒットした配列のコメント
      puts hit.target_len       # ヒットした配列の長さ
      puts hit.target_seq       # ヒットした配列
      puts hit.query_start      # 盞同領域の問い合わせ配列での開始残基䜍眮
      puts hit.query_end        # 盞同領域の問い合わせ配列での終了残基䜍眮
      puts hit.target_start     # 盞同領域のタヌゲット配列での開始残基䜍眮
      puts hit.target_end       # 盞同領域のタヌゲット配列での終了残基䜍眮
      puts hit.lap_at           # 䞊蚘䜍眮の数倀の配列
    end

などのメ゜ッドで呌び出せたす。これらのメ゜ッドの倚くは埌で説明する
Bio::Blast::Report クラスず共通にしおありたす。䞊蚘以倖のメ゜ッドや
FASTA 特有の倀を取り出すメ゜ッドが必芁な堎合は、Bio::Fasta::Report
クラスのドキュメントを参照しおください。

もし、パヌスする前の手を加えおいない fasta コマンドの実行結果が必芁な
堎合には、

    report = factory.query(entry)
    puts factory.output

のように、query メ゜ッドを実行した埌で factory オブゞェクトの output
メ゜ッドを䜿っお取り出すこずができたす。


=== リモヌトの堎合

今のずころ GenomeNet (fasta.genome.jp) での怜玢のみサポヌトしおいたす。
リモヌトの堎合は䜿甚可胜な怜玢察象デヌタベヌスが決たっおいたすが、それ以
倖の点に぀いおは Bio::Fasta.remote ず Bio::Fasta.local は同じように䜿う
こずができたす。

GenomeNet で䜿甚可胜な怜玢察象デヌタベヌス

  * アミノ酞配列デヌタベヌス
    * nr-aa, genes, vgenes.pep, swissprot, swissprot-upd, pir, prf, pdbstr

  * 塩基配列デヌタベヌス
    * nr-nt, genbank-nonst, gbnonst-upd, dbest, dbgss, htgs, dbsts,
      embl-nonst, embnonst-upd, genes-nt, genome, vgenes.nuc

たず、この䞭から怜玢したいデヌタベヌスを遞択したす。問い合わせ配列の皮類
ず怜玢するデヌタベヌスの皮類によっおプログラムは決たりたす。

  * 問い合わせ配列がアミノ酞のずき
    * 察象デヌタベヌスがアミノ酞配列デヌタベヌスの堎合、program は 'fasta'
    * 察象デヌタベヌスが栞酞配列デヌタベヌスの堎合、program は 'tfasta'

  * 問い合わせ配列が栞酞配列のずき
    * 察象デヌタベヌスが栞酞配列デヌタベヌスの堎合、program は 'fasta'
    * (察象デヌタベヌスがアミノ酞配列デヌタベヌスの堎合は怜玢䞍胜?)

プログラムずデヌタベヌスの組み合せが決たったら

    program = 'fasta'
    database = 'genes'
    
    factory = Bio::Fasta.remote(program, database)

ずしおファクトリヌを䜜り、ロヌカルの堎合ず同じように factory.query など
のメ゜ッドで怜玢を実行したす。


== BLAST による盞同性怜玢を行うBio::Blast クラス

BLAST もロヌカルず GenomeNet (blast.genome.jp) での怜玢をサポヌトしお
いたす。できるだけ Bio::Fasta ず API を共通にしおいたすので、䞊蚘の䟋を 
Bio::Blast ず曞き換えただけでも倧䞈倫な堎合が倚いです。

たずえば、先の f_search.rb は

    # BLAST を実行する環境オブゞェクトを䜜る
    factory = Bio::Blast.local('blastp', ARGV.pop) 

ず倉曎するだけで同じように実行できたす。

同様に、GenomeNet を䜿甚しおBLASTを行う堎合には Bio::Blast.remote を䜿いたす。
この堎合、programの指定内容が FASTA ず異なりたす。

  * 問い合わせ配列がアミノ酞のずき
    * 察象デヌタベヌスがアミノ酞配列デヌタベヌスの堎合、program は 'blastp'
    * 察象デヌタベヌスが栞酞配列デヌタベヌスの堎合、program は 'tblastn'

  * 問い合わせ配列が塩基配列のずき
    * 察象デヌタベヌスがアミノ酞配列デヌタベヌスの堎合、program は 'blastx'
    * 察象デヌタベヌスが塩基配列デヌタベヌスの堎合、program は 'blastn'
    * (問い合わせ・デヌタベヌス共に6フレヌム翻蚳を行う堎合は 'tblastx')

をそれぞれ指定したす。

ずころで、BLAST では "-m 7" オプションによる XML 出力フォヌマッットの方が
埗られる情報が豊富なため、Bio::Blast は Ruby 甚の XML ラむブラリである
XMLParser たたは REXML が䜿甚可胜な堎合は、XML 出力を利甚したす。
䞡方䜿甚可胜な堎合、XMLParser のほうが高速なので優先的に䜿甚されたす。
なお、Ruby 1.8.0 以降では REXML は Ruby 本䜓に暙準添付されおいたす。
もし XML ラむブラリがむンストヌルされおいない堎合は "-m 8" のタブ区切りの
出力圢匏を扱うようにしおいたす。しかし、このフォヌマットでは埗られる
デヌタが限られるので、"-m 7" の XML 圢匏の出力を䜿うこずをお勧めしたす。

すでに芋たように Bio::Fasta::Report ず Bio::Blast::Report の Hit オブゞェ
クトはいく぀か共通のメ゜ッドを持っおいたす。BLAST 固有のメ゜ッドで良く䜿
いそうなものには bit_score や midline などがありたす。

    report.each do |hit|
      puts hit.bit_score        # bit スコア (*)
      puts hit.query_seq        # 問い合わせ配列
      puts hit.midline          # アラむメントの midline 文字列 (*)
      puts hit.target_seq       # ヒットした配列
      
      puts hit.evalue           # E-value
      puts hit.identity         # % identity
      puts hit.overlap          # オヌバヌラップしおいる領域の長さ 
      puts hit.query_id         # 問い合わせ配列の ID
      puts hit.query_def        # 問い合わせ配列のコメント
      puts hit.query_len        # 問い合わせ配列の長さ
      puts hit.target_id        # ヒットした配列の ID
      puts hit.target_def       # ヒットした配列のコメント
      puts hit.target_len       # ヒットした配列の長さ
      puts hit.query_start      # 盞同領域の問い合わせ配列での開始残基䜍眮
      puts hit.query_end        # 盞同領域の問い合わせ配列での終了残基䜍眮
      puts hit.target_start     # 盞同領域のタヌゲット配列での開始残基䜍眮
      puts hit.target_end       # 盞同領域のタヌゲット配列での終了残基䜍眮
      puts hit.lap_at           # 䞊蚘䜍眮の数倀の配列
    end

FASTAずのAPI共通化のためず簡䟿のため、スコアなどいく぀かの情報は1番目の
Hsp (High-scoring segment pair) の倀をHitで返すようにしおいたす。

Bio::Blast::Report オブゞェクトは、以䞋に瀺すような、BLASTの結果出力の
デヌタ構造をそのたた反映した階局的なデヌタ構造を持っおいたす。具䜓的には

  * Bio::Blast::Report オブゞェクトの @iteratinos に
    * Bio::Blast::Report::Iteration オブゞェクトの Array が入っおおり
      Bio::Blast::Report::Iteration オブゞェクトの @hits に
      * Bio::Blast::Report::Hits オブゞェクトの Array が入っおおり
        Bio::Blast::Report::Hits オブゞェクトの @hsps に
        * Bio::Blast::Report::Hsp オブゞェクトの Array が入っおいる

ずいう階局構造になっおおり、それぞれが内郚の倀を取り出すためのメ゜ッドを
持っおいたす。これらのメ゜ッドの詳现や、BLAST 実行の統蚈情報などの倀が
必芁な堎合には、 bio/appl/blast/*.rb 内のドキュメントやテストコヌドを
参照しおください。


=== 既存の BLAST 出力ファむルをパヌスする

BLAST を実行した結果ファむルがすでに保存しおあっお、これを解析したい堎合
にはBio::Blast オブゞェクトを䜜らずに Bio::Blast::Report オブゞェク
トを䜜りたい、ずいうこずになりたす。これには Bio::Blast.reports メ゜ッド
を䜿いたす。察応しおいるのは デフォルト出力フォヌマット("-m 0") たたは
"-m 7" オプションの XML フォヌマット出力です。

    #!/usr/bin/env ruby
    
    require 'bio'

    # BLAST出力を順にパヌスしお Bio::Blast::Report オブゞェクトを返す
    Bio::Blast.reports(ARGF) do |report|
      puts "Hits for " + report.query_def + " against " + report.db
      report.each do |hit|
        print hit.target_id, "\t", hit.evalue, "\n" if hit.evalue < 0.001
      end
    end

のようなスクリプト hits_under_0.001.rb を曞いお、

   % ./hits_under_0.001.rb *.xml

などず実行すれば、匕数に䞎えた BLAST の結果ファむル *.xml を順番に凊理で
きたす。

Blast のバヌゞョンや OS などによっお出力される XML の圢匏が異なる可胜性
があり、時々 XML のパヌザがうたく䜿えないこずがあるようです。その堎合は
Blast 2.2.5 以降のバヌゞョンをむンストヌルするか -D や -m などのオプショ
ンの組み合せを倉えお詊しおみおください。


=== リモヌト怜玢サむトを远加するには

泚: このセクションは䞊玚ナヌザ向けです。可胜であれば SOAP などによる
りェブサヌビスを利甚する方がよいでしょう。

Blast 怜玢は NCBI をはじめ様々なサむトでサヌビスされおいたすが、今のずこ
ろ BioRuby では GenomeNet 以倖には察応しおいたせん。これらのサむトは、

  * CGI を呌び出すコマンドラむンオプションはそのサむト甚に凊理する
  * -m 8 など BioRuby がパヌザを持っおいる出力フォヌマットで blast の
    出力を取り出す

こずさえできれば、query を受け取っお怜玢結果を Bio::Blast::Report.new に
枡すようなメ゜ッドを定矩するだけで䜿えるようになりたす。具䜓的には、この
メ゜ッドを「exec_サむト名」のような名前で Bio::Blast の private メ゜ッド
ずしお登録するず、番目の匕数に「サむト名」を指定しお

    factory = Bio::Blast.remote(program, db, option, 'サむト名')

のように呌び出せるようになっおいたす。完成したら BioRuby プロゞェクトた
で送っおもらえれば取り蟌たせお頂きたす。


== PubMed を匕いお匕甚文献リストを䜜る (Bio::PubMed クラス)

次は、NCBI の文献デヌタベヌス PubMed を怜玢しお匕甚文献リストを䜜成する䟋です。

    #!/usr/bin/env ruby
    
    require 'bio'
    
    ARGV.each do |id|
      entry = Bio::PubMed.query(id)     # PubMed を取埗するクラスメ゜ッド
      medline = Bio::MEDLINE.new(entry) # Bio::MEDLINE オブゞェクト
      reference = medline.reference     # Bio::Reference オブゞェクト
      puts reference.bibtex             # BibTeX フォヌマットで出力
    end

このスクリプトを pmfetch.rb など奜きな名前で保存し、

    % ./pmfetch.rb 11024183 10592278 10592173

など匕甚したい論文の PubMed ID (PMID) を匕数に䞊べるず NCBI にアクセスし
お MEDLINE フォヌマットをパヌスし BibTeX フォヌマットに倉換しお出力しお
くれるはずです。

他に、キヌワヌドで怜玢する機胜もありたす。

    #!/usr/bin/env ruby
    
    require 'bio'
    
    # コマンドラむンで䞎えたキヌワヌドのリストを぀の文字列にする
    keywords = ARGV.join(' ')
    
    # PubMed をキヌワヌドで怜玢
    entries = Bio::PubMed.search(keywords)
    
    entries.each do |entry|
      medline = Bio::MEDLINE.new(entry) # Bio::MEDLINE オブゞェクト
      reference = medline.reference     # Bio::Reference オブゞェクト
      puts reference.bibtex             # BibTeX フォヌマットで出力
    end

このスクリプトを pmsearch.rb など奜きな名前で保存し

    % ./pmsearch.rb genome bioinformatics

など怜玢したいキヌワヌドを匕数に䞊べお実行するず、PubMed をキヌワヌド
怜玢しおヒットした論文のリストを BibTeX フォヌマットで出力したす。

最近では、NCBI は E-Utils ずいうりェブアプリケヌションを䜿うこずが
掚奚されおいるので、今埌は Bio::PubMed.esearch メ゜ッドおよび
Bio::PubMed.efetch メ゜ッドを䜿う方が良いでしょう。

    #!/usr/bin/env ruby
    
    require 'bio'
    
    keywords = ARGV.join(' ')
    
    options = {
      'maxdate' => '2003/05/31',
      'retmax' => 1000,
    }
    
    entries = Bio::PubMed.esearch(keywords, options)
    
    Bio::PubMed.efetch(entries).each do |entry|
      medline = Bio::MEDLINE.new(entry)
      reference = medline.reference
      puts reference.bibtex
    end

このスクリプトでは、䞊蚘の pmsearch.rb ずほが同じように動きたす。さらに、
NCBI E-Utils を掻甚するこずにより、怜玢察象の日付や最倧ヒット件数などを
指定できるようになっおいるので、より高機胜です。オプションに䞎えられる
匕数に぀いおは ((<E-Utils のヘルプペヌゞ|URL:http://eutils.ncbi.nlm.nih.gov/entrez/query/static/eutils_help.html>)) を参照しおください。

ちなみに、ここでは bibtex メ゜ッドで BibTeX フォヌマットに倉換しおいたす
が、埌述のように bibitem メ゜ッドも䜿える他、匷調やむタリックなど
文字の修食はできたせんがnature メ゜ッドや nar など、いく぀かの雑誌の
フォヌマットにも察応しおいたす。

=== BibTeX の䜿い方のメモ

䞊蚘の䟋で集めた BibTeX フォヌマットのリストを TeX で䜿う方法を簡単にた
ずめおおきたす。匕甚しそうな文献を

    % ./pmfetch.rb 10592173 >> genoinfo.bib
    % ./pmsearch.rb genome bioinformatics >> genoinfo.bib

などずしお genoinfo.bib ファむルに集めお保存しおおき、

    \documentclass{jarticle}
    \begin{document}
    \bibliographystyle{plain}
    ほにゃらら KEGG デヌタベヌス~\cite{PMID:10592173}はふがほげである。
    \bibliography{genoinfo}
    \end{document}

ずいうファむル hoge.tex を曞いお、

    % platex hoge
    % bibtex hoge   # → genoinfo.bib の凊理
    % platex hoge   # → 文献リストの䜜成
    % platex hoge   # → 文献番号

ずするず無事 hoge.dvi ができあがりたす。
    
=== bibitem の䜿い方のメモ

文献甚に別の .bib ファむルを䜜りたくない堎合は Reference#bibitem メ゜ッ
ドの出力を䜿いたす。䞊蚘の pmfetch.rb や pmsearch.rb の

    puts reference.bibtex

の行を

    puts reference.bibitem

に曞き換えるなどしお、出力結果を

    \documentclass{jarticle}
    \begin{document}
    ほにゃらら KEGG デヌタベヌス~\cite{PMID:10592173}はふがほげである。

    \begin{thebibliography}{00}

    \bibitem{PMID:10592173}
    Kanehisa, M., Goto, S.
    KEGG: kyoto encyclopedia of genes and genomes.,
    {\em Nucleic Acids Res}, 28(1):27--30, 2000.

    \end{thebibliography}
    \end{document}

のように \begin{thebibliography} で囲みたす。これを hoge.tex ずするず

    % platex hoge   # → 文献リストの䜜成
    % platex hoge   # → 文献番号

ず回凊理すればできあがりです。


= OBDA

OBDA (Open Bio Database Access) ずは、Open Bioinformatics Foundation
によっお制定された、配列デヌタベヌスぞの共通アクセス方法です。これは、
2002 幎の1月ず2月に Arizona ず Cape Town にお開催された BioHackathon
においお、BioPerl, BioJava, BioPython, BioRuby などの各プロゞェクトの
メンバヌが参加しお䜜成されたした。

* BioRegistry (Directory)
  * デヌタベヌス毎に配列をどこにどのように取りに行くかを指定する仕組み

* BioFlat
  * フラットファむルの 2 分朚たたは BDB を䜿ったむンデックス䜜成

* BioFetch
  * HTTP 経由でデヌタベヌスから゚ントリを取埗するサヌバずクラむアント

* BioSQL
  * MySQL や PostgreSQL などの関係デヌタベヌスに配列デヌタを栌玍する
    ための schema ず、゚ントリを取り出すためのメ゜ッド

詳现は ((<URL:http://obda.open-bio.org/>)) を参照しおください。
それぞれの仕様曞は cvs.open-bio.org の CVSレポゞトリに眮いおありたす。
たたは、((<URL:http://cvs.open-bio.org/cgi-bin/viewcvs/viewcvs.cgi/obda-specs/?cvsroot=obf-common>)) から参照できたす。


== BioRegistry

BioRegistryずは、蚭定ファむルによっお各デヌタベヌスの゚ントリ取埗方法を
指定するこずにより、どんな方法を䜿っおいるかをほずんど意識せずデヌタを
取埗するこずを可胜ずするための仕組みです。
蚭定ファむルの優先順䜍は

  * (メ゜ッドのパラメヌタで)指定したファむル
  * ~/.bioinformatics/seqdatabase.ini
  * /etc/bioinformatics/seqdatabase.ini
  * http://www.open-bio.org/registry/seqdatabase.ini

最埌の open-bio.org の蚭定は、ロヌカルな蚭定ファむルが芋぀からない堎合に
だけ参照したす。

BioRuby の珟圚の実装では、すべおのロヌカルな蚭定ファむルを読み蟌み、
同じ名前の蚭定が耇数存圚した堎合は、最初に芋぀かった蚭定だけが䜿甚されたす。
これを利甚するず、たずえば、システム管理者が /etc/bioinformatics/ に眮いた
蚭定のうち個人的に倉曎したいものだけ ~/.bioinformatics/ で䞊曞きするこずが
できたす。サンプルの seqdatabase.ini ファむルが bioruby の゜ヌスに含たれお
いたすので参照しおください。

蚭定ファむルの䞭身は stanza フォヌマットず呌ばれる曞匏で蚘述したす。

    [デヌタベヌス名]
    protocol=プロトコル名
    location=サヌバ名

このような゚ントリを各デヌタベヌスに぀いお蚘述するこずになりたす。
デヌタベヌス名は、自分が䜿甚するためのラベルなので分かりやすいものを
぀ければ良く、実際のデヌタベヌスの名前ず異なっおいおも構わないようです。
同じ名前のデヌタベヌスが耇数あるずきは最初に曞かれおいるものから順に
接続を詊すように仕様曞では提案されおいたすが、今のずころ BioRuby では
それには察応しおいたせん。

たた、プロトコルの皮類によっおは location 以倖にもMySQL のナヌザ名など
远加のオプションを蚘述する必芁がありたす。珟圚のずころ、仕様曞で芏定され
おいる protocol ずしおは以䞋のものがありたす。

  * index-flat
  * index-berkeleydb
  * biofetch
  * biosql
  * bsane-corba
  * xembl

今のずころ BioRuby で䜿甚可胜なのは index-flat, index-berkleydb, biofetch
ず biosql だけです。たた、BioRegistryや各プロトコルの仕様は倉曎されるこず
がありたすが、BioRubyはそれに远埓できおいないかもしれたせん。

BioRegistry を䜿うには、たず Bio::Registryオブゞェクトを䜜成したす。
するず、蚭定ファむルが読み蟌たれたす。

    reg = Bio::Registry.new
    
    # 蚭定ファむルに曞いたデヌタベヌス名でサヌバぞ接続
    serv = reg.get_database('genbank')
    
    # ID を指定しお゚ントリを取埗
    entry = serv.get_by_id('AA2CG')

ここで serv は蚭定ファむルの [genbank] の欄で指定した protocol プロトコ
ルに察応するサヌバオブゞェクトで、Bio::SQL や Bio::Fetch などのむンスタ
ンスが返っおいるはずですデヌタベヌス名が芋぀からなかった堎合は nil。

あずは OBDA 共通の゚ントリ取埗メ゜ッド get_by_id を呌んだり、サヌバオ
ブゞェクト毎に固有のメ゜ッドを呌ぶこずになりたすので、以䞋の BioFetch や
BioSQL の解説を参照しおください。


== BioFlat

BioFlat はフラットファむルに察しおむンデックスを䜜成し、゚ントリを高速に
取り出す仕組みです。むンデックスの皮類は、RUbyの拡匵ラむブラリに䟝存しない
index-flat ず Berkeley DB (bdb) を䜿った index-berkeleydb の2皮類が存圚
したす。なお、index-berkeleydb を䜿甚するには、BDB ずいう Ruby の拡匵
ラむブラリを別途むンストヌルする必芁がありたす。むンデックスの䜜成には
bioruby パッケヌゞに付属する br_bioflat.rb コマンドを䜿っお、

    % br_bioflat.rb --makeindex デヌタベヌス名 [--format クラス名] ファむル名

のようにしたす。BioRubyはデヌタフォヌマットの自動認識機胜を搭茉しおいる
ので --format オプションは省略可胜ですが、䞇䞀うたく認識しなかった堎合は
BioRuby の各デヌタベヌスのクラス名を指定しおください。怜玢は、

    % bioflat デヌタベヌス名 ゚ントリID

ずしたす。具䜓的に GenBank の gbbct*.seq ファむルにむンデックスを䜜成し
お怜玢する堎合、

    % bioflat --makeindex my_bctdb --format GenBank gbbct*.seq
    % bioflat my_bctdb A16STM262

のような感じになりたす。

Ruby の bdb 拡匵モゞュヌル(詳现は http://raa.ruby-lang.org/project/bdb/ 参照)
がむンストヌルされおいる堎合は Berkeley DB を利甚しおむンデックスを䜜成する
こずができたす。この堎合、

    % bioflat --makeindex-bdb デヌタベヌス名 [--format クラス名] ファむル名

のように "--makeindex" のかわりに "--makeindex-bdb" を指定したす。


== BioFetch

BioFetch は CGI を経由しおサヌバからデヌタベヌスの゚ントリを取埗する仕様
で、サヌバが受け取る CGI のオプション名、゚ラヌコヌドなどが決められおい
たす。クラむアントは HTTP を䜿っおデヌタベヌス、ID、フォヌマットなどを指
定し、゚ントリを取埗したす。

BioRuby プロゞェクトでは GenomeNet の DBGET システムをバック゚ンドずした
BioFetch サヌバを実装しおおり、bioruby.org で運甚しおいたす。このサヌバの
゜ヌスコヌドは BioRuby の sample/ ディレクトリに入っおいたす。珟圚のずころ
BioFetch サヌバはこの bioruby.org のものず EBI の二か所しかありたせん。

BioFetch を䜿っお゚ントリを取埗するには、いく぀かの方法がありたす。

(1) りェブブラりザから怜玢する方法以䞋のペヌゞを開く

      http://bioruby.org/cgi-bin/biofetch.rb

(2) BioRuby付属の br_biofetch.rb コマンドを甚いる方法

      % br_biofetch.rb db_name entry_id

(3) スクリプトの䞭から Bio::Fetch クラスを盎接䜿う方法

      serv = Bio::Fetch.new(server_url)
      entry = serv.fetch(db_name, entry_id)

(4) スクリプトの䞭で BioRegistry 経由で Bio::Fetch クラスを間接的に䜿う方法

      reg = Bio::Registry.new
      serv = reg.get_database('genbank')
      entry = serv.get_by_id('AA2CG')

もし (4) を䜿いたい堎合は seqdatabase.ini で

    [genbank]
    protocol=biofetch
    location=http://bioruby.org/cgi-bin/biofetch.rb
    biodbname=genbank

などず指定しおおく必芁がありたす。

=== BioFetch ず Bio::KEGG::GENES, Bio::AAindex1 を組み合わせた䟋

次のプログラムは、BioFetch を䜿っお KEGG の GENES デヌタベヌスから叀现菌
Halobacterium のバクテリアロドプシン遺䌝子 (VNG1467G) を取っおきお、同じ
ようにアミノ酞指暙デヌタベヌスである AAindex から取埗したαヘリックスの
指暙 (BURA740101) を䜿っお、幅 15 残基のりィンドりサヌチをする䟋です。

    #!/usr/bin/env ruby
    
    require 'bio'

    entry = Bio::Fetch.query('hal', 'VNG1467G')
    aaseq = Bio::KEGG::GENES.new(entry).aaseq
    
    entry = Bio::Fetch.query('aax1', 'BURA740101')
    helix = Bio::AAindex1.new(entry).index
    
    position = 1
    win_size = 15
    
    aaseq.window_search(win_size) do |subseq|
      score = subseq.total(helix)
      puts [ position, score ].join("\t")
      position += 1
    end

ここで䜿っおいるクラスメ゜ッド Bio::Fetch.query は暗黙に bioruby.org の
BioFetch サヌバを䜿う専甚のショヌトカットです。このサヌバは内郚的には
ゲノムネットからデヌタを取埗しおいたす。KEGG/GENES デヌタベヌスの hal や 
AAindex デヌタベヌス aax1 の゚ントリは、他の BioFetch サヌバでは取埗でき
ないこずもあっお、あえお query メ゜ッドを䜿っおいたす。

== BioSQL

to be written...

== BioRuby のサンプルプログラムの䜿い方

BioRuby のパッケヌゞには samples/ ディレクトリ以䞋にいく぀かのサンプルプ
ログラムが含たれおいたす。叀いものも混じっおいたすし、量もずおも十分ずは
蚀えないので、実甚的で面癜いサンプルの提䟛は歓迎です。

to be written...

== さらなる情報

他のチュヌトリアル的なドキュメントずしおは、BioRuby Wikiに眮いおある
BioRuby in Anger がありたす。


== 脚泚

* (※1) BioRuby 1.2.1 以前のバヌゞョンでは、setup.rb のかわりに install.rb
  を䜿甚したす。たた、以䞋のように3段階を螏む必芁がありたす。

    % ruby install.rb config
    % ruby install.rb setup
    # ruby install.rb install

* (※2) BioRuby 1.0.0 以前のバヌゞョンでは、getseq, getent, getobj
  の各コマンドのかわりに、seq, ent, obj の各コマンドを䜿甚しおください。

* (※3) BioRuby 0.7.1 以前のバヌゞョンでは、Bio::Sequence::NA クラスか、
  Bio::sequence::AA クラスのどちらかのオブゞェクトになりたす。
  配列がどちらのクラスに属するかは Ruby の class メ゜ッドを甚いお

    bioruby> p cdc2.class
    Bio::Sequence::AA

    bioruby> p psaB.class
    Bio::Sequence::NA

  のように調べるこずができたす。自動刀定が間違っおいる堎合などには
  to_naseq, to_aaseq メ゜ッドで匷制的に倉換できたす。

* (※4) seq メ゜ッドは、読み蟌んだデヌタの皮類によっおは、塩基・アミノ酞の
  どちらにも圓おはたらない配列のための Bio::Sequence::Generic クラスや
  String クラスのオブゞェクトを返す堎合があるかもしれたせん。

* (※5) NCBI, EBI, TogoWS が特別な蚭定無しに getseq, getent, getobj コマンド
  から利甚可胜ずなったのは BioRuby 1.3.0 以降です。

=end