@datagrok/bio 1.7.4 → 1.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,101 @@
1
+ id,sequence
2
+ 1,M-F-I-T-M-F-C-M-F-W-L-F-I-F-I-L-M-M-L-I-F-F-M-E-A-M-I-K-P-M-L
3
+ 2,A-Q-M-T-M-F-C-I-M-F-F-L-M-L-M-F-I-I-M-I-M-F-M-I-L-E-A-M-K-K-M-L-N-A-I
4
+ 3,I-L-M-T-M-F-C-I-C-W-M-I-M-I-F-F-L-L-L-I-M-F-M-L-M-A-M-M-K-M-L-I-F-L
5
+ 4,F-Q-M-T-M-I-C-M-L-F-F-L-M-M-F-M-F-D-L-I-I-L-F-I-M-M-E-A-M-M-K-P-D-L-M-F-I
6
+ 5,L-L-M-T-M-F-C-F-F-M-M-L-L-M-F-F-M-F-M-I-M-F-M-Y-F-E-A-M-K-K-F-F-I-L-F
7
+ 6,A-M-M-T-M-F-C-F-M-L-I-M-M-F-I-L-L-F-I-D-I-I-M-E-A-M-L-K-L-D-N-F-I
8
+ 7,L-L-M-T-M-F-C-M-I-L-I-S-M-I-M-I-L-M-M-I-M-F-L-M-E-A-M-K-K-I-F-F-A-V
9
+ 8,L-I-M-T-M-F-C-M-L-I-L-I-F-M-L-M-D-F-M-I-I-M-I-F-F-E-A-M-F-K-M-L-F-L-M-F
10
+ 9,F-Q-M-T-M-F-C-L-M-I-F-M-W-I-F-M-M-M-M-I-L-D-I-F-I-E-A-M-I-K-F-I-N-L-F-M
11
+ 10,F-L-M-T-M-F-C-I-L-I-N-I-M-I-I-W-M-I-I-M-L-M-F-E-A-M-F-K-L-D-I-I-F
12
+ 11,F-F-M-T-M-F-C-M-M-I-F-L-L-L-I-M-I-I-I-M-I-M-D-M-I-M-E-A-M-K-K-M-M-D-I-I-I
13
+ 12,I-M-M-T-M-F-C-I-C-L-L-F-W-L-L-F-M-L-L-I-M-D-M-M-F-E-A-M-L-K-F-I-M-M-I
14
+ 13,M-Q-M-T-M-F-C-F-M-L-L-L-M-F-F-M-D-I-M-I-I-M-L-L-D-E-A-M-L-K-L-D-L-I-L
15
+ 14,L-Q-M-T-M-F-C-I-F-W-M-L-F-M-L-F-M-L-F-I-F-F-L-F-L-E-A-M-L-K-F-I-N-L-I
16
+ 15,I-I-M-T-M-F-C-M-I-M-I-I-S-I-F-F-I-I-M-I-M-L-F-I-F-E-A-M-I-K-L-D-I-I-A-M
17
+ 16,F-L-M-T-M-L-C-M-C-F-I-L-F-F-F-L-F-M-F-I-M-L-S-F-F-L-E-A-L-I-K-I-L-I-L-I
18
+ 17,F-Q-M-T-M-F-C-M-M-I-F-L-F-I-M-W-M-I-I-F-I-I-F-F-I-F-E-A-M-K-M-L-L-L-L
19
+ 18,M-F-M-T-M-F-C-M-C-I-M-F-W-I-F-D-I-I-I-I-I-L-F-L-I-E-A-M-L-K-L-F-F-I-I-V
20
+ 19,I-M-L-M-T-M-F-C-M-F-F-F-M-W-I-F-M-F-M-L-I-I-F-S-L-I-L-E-A-M-M-K-P-D-I-I-I
21
+ 20,A-F-L-T-M-F-C-F-M-W-L-L-M-L-M-F-L-F-L-I-M-I-I-I-D-E-A-M-I-K-L-F-F-L
22
+ 21,F-Q-M-T-M-F-C-F-L-L-M-S-F-L-M-I-I-M-I-F-I-L-M-F-F-D-E-A-M-F-K-I-L-N-F-I
23
+ 22,M-I-M-T-M-F-C-M-L-M-N-L-L-M-F-F-M-L-I-I-L-I-L-M-I-E-A-M-L-K-L-M-M-A-I
24
+ 23,M-I-M-T-M-F-C-M-I-I-L-M-F-H-M-M-M-F-L-I-F-I-L-Y-E-A-M-K-K-L-F-N-M-I-V
25
+ 24,L-F-T-M-F-C-M-C-W-M-I-M-I-F-W-I-I-I-L-M-I-M-I-F-L-A-M-K-K-P-M-F-L-F
26
+ 25,A-F-L-M-T-M-F-C-I-C-W-F-L-F-F-L-F-M-I-L-I-M-L-M-F-F-E-A-M-K-K-F-F-L-V
27
+ 26,L-L-M-T-M-F-C-M-C-M-N-M-M-M-F-M-L-I-M-M-I-L-M-S-Y-I-E-A-M-F-K-F-F-L-I
28
+ 27,L-Q-L-T-M-F-C-F-I-L-L-I-F-L-M-I-L-L-I-L-M-I-L-F-E-A-M-M-K-M-F-F-A-L
29
+ 28,I-Q-M-T-M-F-C-M-M-M-M-F-L-M-L-F-F-I-D-I-M-F-L-M-M-E-M-M-F-K-M-D-L-M-F-F
30
+ 29,M-M-T-M-F-C-I-W-I-F-M-M-I-L-D-M-M-F-F-I-I-M-I-I-A-M-M-M-F-L-L-I-I-V
31
+ 30,F-Q-M-T-M-F-C-M-M-L-F-M-F-I-L-W-D-I-F-I-M-I-S-M-L-E-A-M-M-K-L-D-I-I-M
32
+ 31,L-F-M-T-M-F-C-M-M-M-N-F-M-I-F-W-L-I-L-I-F-F-S-L-F-E-A-M-K-K-L-I-L-A-M
33
+ 32,A-F-M-T-M-F-C-M-F-L-W-F-I-L-H-L-W-I-F-F-I-M-M-L-I-M-I-E-A-M-I-K-I-D-I-A-V
34
+ 33,L-L-T-M-F-C-M-I-L-I-F-W-H-F-M-F-M-D-I-M-M-M-M-I-F-E-A-M-L-M-I-F-I-M-I
35
+ 34,I-M-M-T-M-F-C-F-C-F-L-I-F-H-M-M-I-F-D-I-M-I-S-M-I-E-A-M-K-K-I-I-M-L-L
36
+ 35,F-M-M-T-M-F-C-M-M-M-L-F-I-I-M-F-L-I-M-M-I-D-I-L-L-F-I-D-E-A-M-M-K-D-F-I-L
37
+ 36,I-M-M-T-M-F-C-M-I-I-L-F-M-F-M-F-M-M-I-I-I-M-L-F-F-M-L-E-A-M-F-K-M-M-F-F
38
+ 37,L-L-M-T-M-F-C-M-L-W-M-M-L-F-I-F-F-I-M-L-I-F-I-S-L-F-E-A-M-K-K-I-F-I-I-M
39
+ 38,F-I-M-T-M-F-C-M-M-L-L-L-F-F-F-I-I-L-D-I-M-L-M-F-I-E-A-M-K-K-L-L-L-L
40
+ 39,I-M-M-T-M-F-C-F-M-M-M-S-M-M-F-F-F-L-I-I-I-I-L-F-M-F-D-M-A-M-K-I-L-L-I
41
+ 40,M-F-M-T-M-F-C-M-F-I-L-I-L-L-L-W-I-I-D-I-M-F-M-L-D-E-A-M-K-K-P-D-F-L
42
+ 41,L-I-M-T-M-F-C-M-C-M-F-L-I-L-W-M-M-F-I-M-L-I-I-I-E-A-M-K-K-P-I-I-L-I
43
+ 42,A-F-M-T-M-F-C-F-M-M-M-F-M-H-F-M-L-I-F-I-F-M-I-F-M-E-A-M-K-K-F-F-L-F-L-M
44
+ 43,A-F-I-Q-M-T-M-L-C-M-C-M-L-L-M-F-F-L-D-I-F-I-I-I-I-F-L-D-E-A-M-M-K-P-L-M-L-L
45
+ 44,L-Q-M-T-M-F-C-M-F-M-I-I-L-F-D-M-I-M-M-M-M-M-E-A-M-L-K-I-M-I-F
46
+ 45,A-L-M-T-M-F-C-F-I-W-N-S-I-F-I-F-I-F-D-I-L-M-I-L-L-I-E-A-M-F-K-M-D-N-I-I
47
+ 46,L-M-M-T-M-F-C-L-M-L-F-S-W-L-M-W-L-M-I-I-F-I-I-M-M-I-L-E-A-M-L-K-P-L-F-A-F-V
48
+ 47,F-F-M-T-M-F-C-M-F-F-I-M-F-L-I-F-F-L-L-L-I-M-L-F-M-M-E-A-M-L-K-I-F-L
49
+ 48,L-M-M-M-T-M-F-C-I-F-M-L-L-F-F-F-F-M-F-I-M-M-M-F-D-E-A-M-F-K-M-D-M-I-L
50
+ 49,Q-I-T-M-F-C-I-F-F-M-F-I-I-M-W-L-F-F-F-L-F-F-L-F-E-A-M-L-K-M-I-M-A-L
51
+ 50,I-I-M-T-M-F-C-I-M-L-I-L-W-I-F-L-F-I-I-I-I-M-I-L-I-A-M-K-K-L-I-L-L-L
52
+ 51,I-L-M-T-M-F-C-M-M-L-I-I-F-F-F-M-L-F-F-I-L-I-I-L-D-F-F-F-E-A-M-L-K-I-D-M-M-I
53
+ 52,F-I-M-T-M-F-C-M-C-W-F-I-L-L-I-M-M-I-I-I-F-L-I-D-E-A-M-M-K-M-F-L-M-M
54
+ 53,F-I-M-T-M-F-C-M-L-L-M-F-S-L-M-F-F-M-M-M-I-L-I-F-Y-I-E-A-M-I-K-M-M-L-F-I
55
+ 54,I-Q-M-T-M-F-C-M-C-W-M-F-L-H-M-M-F-L-D-I-L-F-I-F-L-D-E-A-M-L-K-M-I-I-F-L
56
+ 55,F-M-M-T-M-F-C-M-L-I-L-M-M-H-L-F-F-F-I-I-M-D-M-I-E-A-M-L-K-M-D-M-L-V
57
+ 56,L-M-M-T-M-F-C-M-F-I-N-S-M-L-L-M-M-F-I-L-I-L-M-M-L-F-E-A-M-K-K-P-F-M-I-M
58
+ 57,M-L-M-T-M-F-C-L-I-M-N-F-F-M-F-L-M-F-M-I-M-M-M-E-A-M-F-K-M-L-M
59
+ 58,I-L-M-T-M-F-C-L-F-F-F-S-F-F-F-I-L-I-M-M-I-Y-I-E-A-M-L-K-I-M-M-I-L
60
+ 59,I-I-M-M-T-M-F-C-M-C-L-L-M-L-M-F-W-I-I-M-I-M-I-S-F-L-M-E-A-M-K-K-F-L-I-A-M
61
+ 60,I-F-M-T-M-F-C-M-M-F-N-S-F-L-I-F-W-I-I-L-M-F-F-L-L-I-L-E-A-M-M-K-P-L-N-L-V
62
+ 61,I-F-I-T-M-F-C-M-I-L-L-S-M-L-F-I-L-F-D-I-F-F-I-I-M-E-I-M-K-K-F-I-I-A-F
63
+ 62,I-M-M-T-M-F-C-F-C-M-I-M-F-M-F-I-L-F-L-I-L-F-L-D-E-A-M-M-K-M-L-I-L
64
+ 63,I-F-M-T-M-F-C-M-F-L-M-F-M-I-M-L-L-F-D-I-F-L-S-F-F-E-A-M-K-K-F-F-I-A-V
65
+ 64,I-Q-M-T-M-F-C-M-I-F-F-S-M-M-F-F-M-D-M-D-I-M-I-F-I-I-E-A-M-F-K-M-N-M-L-L
66
+ 65,L-F-M-T-M-F-C-M-F-L-L-M-F-I-L-F-F-I-I-M-D-F-Y-F-F-E-A-M-K-K-P-M-L-I-L-L
67
+ 66,A-M-M-T-M-F-C-M-L-L-M-M-F-H-M-L-D-F-I-F-D-F-F-M-E-A-M-K-K-M-M-M-L
68
+ 67,A-I-M-T-M-F-C-M-F-L-N-L-M-L-M-M-F-I-F-M-M-I-D-E-A-M-I-K-F-L-L-F-I
69
+ 68,M-F-M-T-M-F-C-M-F-I-I-F-L-I-I-M-M-D-L-I-I-M-I-I-M-L-E-A-M-I-F-I-L-I-L-L-L
70
+ 69,I-F-M-T-M-F-F-M-F-M-M-I-I-F-W-L-M-W-D-L-M-I-I-F-S-I-M-I-M-A-M-I-K-L-M-M-A-L
71
+ 70,I-L-M-T-M-F-C-M-M-L-F-L-L-F-F-F-L-I-I-I-I-F-S-M-M-E-A-M-M-K-P-D-I-M-M
72
+ 71,F-F-M-T-M-F-C-M-F-F-I-F-L-H-M-I-F-F-D-I-F-L-F-F-Y-L-E-A-M-M-K-P-M-F-F-I
73
+ 72,M-F-M-T-M-F-C-M-L-W-M-F-M-L-H-I-M-F-F-L-I-M-M-M-L-F-E-A-M-F-K-F-M-L-A-F
74
+ 73,A-I-M-T-M-F-C-M-M-I-M-M-I-M-L-F-F-L-L-I-L-M-F-L-I-E-A-M-F-K-F-I-F-F-M
75
+ 74,M-M-M-T-M-F-C-M-L-M-F-W-I-I-F-I-I-F-L-I-F-I-L-M-I-E-A-M-F-K-M-I-N-I-V
76
+ 75,L-L-M-T-M-F-C-M-L-I-M-L-I-M-L-W-L-M-D-I-M-M-M-L-I-E-A-M-K-K-P-L-M-F-F-L
77
+ 76,L-Q-I-T-M-F-I-M-M-W-I-L-L-F-M-I-F-I-F-I-L-F-F-E-A-M-M-K-F-M-L-F
78
+ 77,I-L-M-T-M-F-C-I-F-F-I-F-F-M-F-M-F-M-F-F-I-M-F-F-L-I-E-A-M-K-K-L-D-I-M-L
79
+ 78,M-L-M-T-M-L-C-M-M-M-F-S-L-L-I-F-I-F-L-D-I-I-I-F-I-L-E-A-M-L-K-F-M-M-I
80
+ 79,I-L-M-T-M-F-C-M-C-M-M-M-I-M-M-I-I-I-I-M-D-S-F-L-E-A-M-K-K-P-M-M-M-I
81
+ 80,Q-M-T-M-F-C-M-M-F-F-I-I-H-M-M-I-I-F-F-M-D-L-I-M-M-L-A-M-K-K-P-D-M-A-I
82
+ 81,L-L-M-T-M-I-C-I-L-F-F-M-F-M-F-L-M-M-L-I-I-M-F-L-Y-F-E-A-M-M-K-M-L-N-I-I
83
+ 82,M-M-M-M-F-C-M-F-I-F-F-I-H-F-M-L-I-L-I-M-L-I-Y-M-M-I-M-K-I-M-M-N-M-L
84
+ 83,A-L-M-T-M-F-C-M-F-I-F-F-M-L-M-M-M-I-I-I-F-F-F-F-E-A-M-M-K-M-F-I-F-V
85
+ 84,A-L-M-T-M-F-C-M-W-L-I-L-M-W-F-M-I-I-I-L-M-M-D-E-A-M-K-K-L-L-N-I-L
86
+ 85,L-I-I-M-T-M-F-C-M-M-L-L-L-I-I-M-M-F-L-I-F-I-F-L-L-E-A-M-I-K-F-L-L-F-L-L
87
+ 86,M-L-M-T-M-F-C-M-L-L-M-F-H-F-L-I-M-M-I-L-I-S-Y-F-E-A-M-K-K-L-I-F-M-L
88
+ 87,F-I-M-T-M-F-C-M-M-I-F-I-F-F-F-M-F-D-I-I-L-S-M-M-A-M-F-K-I-D-L-I-M
89
+ 88,F-M-T-M-F-C-M-M-W-L-S-L-F-F-M-F-L-I-L-F-F-I-F-I-E-A-M-F-K-L-M-N-F-V
90
+ 89,M-M-M-T-M-M-C-M-L-L-I-M-F-L-F-M-F-I-M-F-I-F-M-L-I-E-A-M-K-K-L-D-L-L-I
91
+ 90,A-F-M-T-M-F-C-F-M-F-I-S-W-M-M-I-I-F-M-L-I-M-F-I-L-F-E-A-M-M-K-M-F-F-F-L
92
+ 91,L-I-M-T-M-F-C-M-I-W-F-I-M-H-F-L-I-L-M-L-I-M-I-L-Y-L-E-A-M-F-K-P-L-I-F-F
93
+ 92,M-I-M-T-M-F-C-M-F-I-N-L-W-I-F-F-L-L-D-I-F-F-L-I-M-E-A-M-K-L-D-M-I-M
94
+ 93,L-L-M-T-M-F-C-M-F-I-I-M-L-F-F-L-F-M-F-L-I-M-F-F-I-D-E-A-M-F-K-P-L-F-I-M
95
+ 94,F-F-M-T-M-F-C-I-F-F-M-S-L-H-L-F-M-L-L-I-I-F-M-F-D-E-A-M-K-K-M-L-L-F-I
96
+ 95,I-F-F-T-M-F-L-I-F-L-L-F-I-M-M-M-I-D-M-I-I-F-I-L-L-E-A-M-K-K-P-M-F-I-I
97
+ 96,M-F-M-M-T-M-F-C-F-M-I-I-F-F-M-M-M-D-I-M-I-I-M-D-F-I-L-E-A-M-L-K-I-F-L-I-I-I
98
+ 97,I-I-M-T-M-F-C-M-I-I-N-M-L-F-F-D-L-L-I-I-I-L-L-E-A-M-L-K-F-D-M-F-F
99
+ 98,M-L-M-T-M-F-C-M-L-L-I-M-F-M-I-L-I-L-M-F-I-F-L-L-Y-D-E-A-M-K-K-M-L-M-L-I
100
+ 99,L-F-M-T-M-F-C-M-L-I-N-S-L-I-M-I-F-F-D-I-I-I-F-L-E-A-M-F-K-F-F-L-I-L-L
101
+ 100,F-L-M-T-M-F-C-M-M-M-F-S-M-M-M-M-F-I-I-F-M-L-L-I-E-A-M-L-K-I-F-N-A-L
@@ -0,0 +1,78 @@
1
+ cereal_name,Calories,Carbohydrates,Fat,Fiber,Potassium,Protein,Sodium,Sugar,Vitamins/Minerals
2
+ Mueslix_Crispy_Blend,160,17,2,3,160,3,150,13,25
3
+ "Muesli_Raisins,_Dates,_&_Almonds",150,16,3,3,170,4,95,11,25
4
+ "Muesli_Raisins,_Peaches,_&_Pecans",150,16,3,3,170,4,150,11,25
5
+ Just_Right_Fruit_&_Nut,140,20,1,2,95,3,170,9,100
6
+ Nutri-Grain_Almond-Raisin,140,21,2,3,130,3,220,7,25
7
+ Total_Raisin_Bran,140,15,1,4,230,3,190,14,100
8
+ Basic_4,130,18,2,2,100,3,210,8,25
9
+ Oatmeal_Raisin_Crisp,130,null,2,null,120,3,170,10,25
10
+ 100%_Natural_Bran,120,8,5,2,135,3,15,8,0
11
+ Cap'n'Crunch,120,12,2,0,35,1,220,12,25
12
+ Cinnamon_Toast_Crunch,120,13,3,0,45,1,210,9,25
13
+ "Fruit_&_Fibre_Dates,_Walnuts,_and_Oats",120,12,2,5,200,3,160,10,25
14
+ Fruitful_Bran,120,14,0,5,190,3,240,12,25
15
+ Great_Grains_Pecan,120,13,3,3,100,3,75,4,25
16
+ Honey_Graham_Ohs,120,12,2,1,45,1,220,11,25
17
+ Nut&Honey_Crunch,120,15,1,0,40,2,190,9,25
18
+ Post_Nat._Raisin_Bran,120,11,1,6,260,3,200,14,25
19
+ Raisin_Bran,120,14,1,5,240,3,210,12,25
20
+ Almond_Delight,110,14,2,1,-1,2,200,8,25
21
+ Apple_Cinnamon_Cheerios,110,null,2,null,70,2,180,10,25
22
+ Apple_Jacks,110,11,0,1,30,2,125,14,25
23
+ Cheerios,110,17,2,2,105,6,290,1,25
24
+ Clusters,110,13,2,2,105,3,140,7,25
25
+ Cocoa_Puffs,110,12,1,0,55,1,180,13,25
26
+ Corn_Chex,110,22,0,0,25,2,280,3,25
27
+ Corn_Pops,110,13,0,1,20,1,90,12,25
28
+ Count_Chocula,110,12,1,0,65,1,180,13,25
29
+ Cracklin'_Oat_Bran,110,10,3,4,160,3,140,7,25
30
+ Crispix,110,21,0,1,30,2,220,3,25
31
+ Froot_Loops,110,11,1,1,30,2,125,13,25
32
+ Frosted_Flakes,110,14,0,1,25,1,200,11,25
33
+ Fruity_Pebbles,110,13,1,0,25,1,135,12,25
34
+ Golden_Grahams,110,15,1,0,45,1,280,9,25
35
+ Grape-Nuts,110,17,0,3,90,3,170,3,25
36
+ Honey-comb,110,14,0,0,35,1,180,11,25
37
+ Honey_Nut_Cheerios,110,null,1,null,90,3,250,10,25
38
+ Just_Right_Crunchy__Nuggets,110,17,1,1,60,2,170,6,100
39
+ Kix,110,21,1,0,40,2,260,3,25
40
+ Lucky_Charms,110,12,1,0,55,2,180,12,25
41
+ Rice_Chex,110,23,0,0,30,1,240,2,25
42
+ Rice_Krispies,110,22,0,0,35,2,290,3,25
43
+ Smacks,110,9,1,1,40,2,70,15,25
44
+ Special_K,110,16,0,1,55,6,230,3,25
45
+ Total_Corn_Flakes,110,21,1,0,35,2,200,3,100
46
+ Triples,110,21,1,0,60,2,250,3,25
47
+ Trix,110,13,1,0,25,1,140,12,25
48
+ Wheaties_Honey_Gold,110,16,1,1,60,2,200,8,25
49
+ Corn_Flakes,100,21,0,1,35,2,290,2,25
50
+ Cream_of_Wheat_(Quick),100,21,0,1,-1,3,80,0,0
51
+ Crispy_Wheat_&_Raisins,100,11,1,2,120,2,140,10,25
52
+ Double_Chex,100,18,0,1,80,2,190,5,25
53
+ Frosted_Mini-Wheats,100,14,0,3,100,3,0,7,25
54
+ Golden_Crisp,100,11,0,0,40,2,45,15,25
55
+ Grape_Nuts_Flakes,100,15,1,3,85,3,140,5,25
56
+ Life,100,12,2,2,95,4,150,6,25
57
+ Maypo,100,16,1,0,95,4,0,3,25
58
+ Multi-Grain_Cheerios,100,15,1,2,90,2,220,6,25
59
+ Product_19,100,20,0,1,45,3,320,3,100
60
+ Quaker_Oat_Squares,100,14,1,2,110,4,135,6,25
61
+ Quaker_Oatmeal,100,-1,2,null,110,5,0,-1,0
62
+ Raisin_Nut_Bran,100,null,2,null,140,3,140,8,25
63
+ Total_Whole_Grain,100,16,1,3,110,3,200,3,100
64
+ Wheat_Chex,100,17,1,3,115,3,230,3,25
65
+ Wheaties,100,17,1,3,110,3,200,3,25
66
+ Bran_Chex,90,15,1,4,125,2,200,6,25
67
+ Bran_Flakes,90,13,0,5,190,3,210,5,25
68
+ Nutri-grain_Wheat,90,18,0,3,90,3,170,2,25
69
+ Raisin_Squares,90,15,0,2,110,2,0,6,25
70
+ Shredded_Wheat_'n'Bran,90,19,0,4,140,3,0,0,0
71
+ Shredded_Wheat_spoon_size,90,20,0,3,120,3,0,0,0
72
+ Strawberry_Fruit_Wheats,90,15,0,3,90,2,15,5,25
73
+ Shredded_Wheat,80,16,0,3,95,2,0,0,0
74
+ 100%_Bran,70,5,1,10,280,4,130,6,25
75
+ All-Bran,70,7,1,9,320,4,260,5,25
76
+ All-Bran_with_Extra_Fiber,50,8,0,14,330,4,140,0,25
77
+ Puffed_Rice,50,13,0,0,15,1,0,0,0
78
+ Puffed_Wheat,50,10,0,1,50,2,0,0,0
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@datagrok/bio",
3
3
  "beta": false,
4
4
  "friendlyName": "Bio",
5
- "version": "1.7.4",
5
+ "version": "1.7.7",
6
6
  "description": "Bio is a [package](https://datagrok.ai/help/develop/develop#packages) for the [Datagrok](https://datagrok.ai) platform",
7
7
  "repository": {
8
8
  "type": "git",
@@ -11,12 +11,13 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@biowasm/aioli": ">=2.4.0",
14
- "@datagrok-libraries/bio": "2.8.1",
14
+ "@datagrok-libraries/bio": "^2.8.4",
15
15
  "@datagrok-libraries/utils": "^1.0.0",
16
16
  "@datagrok-libraries/ml": "^2.0.10",
17
17
  "cash-dom": "latest",
18
18
  "datagrok-api": "^1.4.12",
19
19
  "dayjs": "latest",
20
+ "rxjs": "^6.5.5",
20
21
  "ts-loader": "^9.2.5",
21
22
  "typescript": "^4.4.2",
22
23
  "openchemlib": "6.0.1"
@@ -5,7 +5,7 @@
5
5
  import * as utils from './test-node';
6
6
  import puppeteer from 'puppeteer';
7
7
 
8
- const P_START_TIMEOUT: number = 100000;
8
+ const P_START_TIMEOUT: number = 500000;
9
9
  let browser: puppeteer.Browser;
10
10
  let page: puppeteer.Page;
11
11
 
@@ -16,15 +16,30 @@ beforeAll(async () => {
16
16
  }, P_START_TIMEOUT);
17
17
 
18
18
  afterAll(async () => {
19
- await browser.close();
19
+ await browser?.close();
20
+ });
21
+
22
+ expect.extend({
23
+ checkOutput(received, expected, context) {
24
+ if (received === expected) {
25
+ return {
26
+ message: () => context,
27
+ pass: true
28
+ };
29
+ } else {
30
+ return {
31
+ message: () => context,
32
+ pass: false
33
+ };
34
+ }
35
+ }
20
36
  });
21
37
 
22
38
  it('TEST', async () => {
23
- const targetPackage: string = process.env.TARGET_PACKAGE ?? 'Bio';
39
+ const targetPackage:string = process.env.TARGET_PACKAGE ?? 'Bio';
24
40
  console.log(`Testing ${targetPackage} package`);
25
41
 
26
- //console.log(require('root-require')('package.json').version);
27
- const r = await page.evaluate((targetPackage): Promise<object> => {
42
+ const r = await page.evaluate((targetPackage):Promise<object> => {
28
43
  return new Promise<object>((resolve, reject) => {
29
44
  (<any>window).grok.functions.eval(targetPackage + ':test()').then((df: any) => {
30
45
  const cStatus = df.columns.byName('success');
@@ -32,23 +47,22 @@ it('TEST', async () => {
32
47
  const cCat = df.columns.byName('category');
33
48
  const cName = df.columns.byName('name');
34
49
  let failed = false;
35
- let report = '';
50
+ let passReport = '';
51
+ let failReport = '';
36
52
  for (let i = 0; i < df.rowCount; i++) {
37
- if (!cStatus.get(i)) {
38
- report += `${cCat.get(i)}.${cName.get(i)}: ${cMessage.get(i)}\n`;
53
+ if (cStatus.get(i)) {
54
+ passReport += `Test result : ${targetPackage}.${cCat.get(i)}.${cName.get(i)} : ${cMessage.get(i)}\n`;
55
+ } else {
39
56
  failed = true;
57
+ failReport += `Test result : ${targetPackage}.${cCat.get(i)}.${cName.get(i)} : ${cMessage.get(i)}\n`;
40
58
  }
41
59
  }
42
- resolve({report, failed});
60
+ resolve({failReport, passReport, failed});
43
61
  }).catch((e: any) => reject(e));
44
62
  });
45
63
  }, targetPackage);
46
64
  // @ts-ignore
47
- console.log(r.report);
65
+ console.log(r.passReport);
48
66
  // @ts-ignore
49
- expect(r.failed).toBe(false);
50
- }, 100000);
51
-
52
- // it('WebLogo.getAlphabetSimilarity', () => {
53
- //
54
- // });
67
+ expect(r.failed).checkOutput(false, r.failReport);
68
+ }, 500000);
@@ -76,7 +76,7 @@ export async function getBrowserPage(puppeteer: any): Promise<{ browser: any, pa
76
76
  await page.goto(url);
77
77
  try {
78
78
  await page.waitForSelector('.grok-preloader');
79
- await page.waitForFunction(() => document.querySelector('.grok-preloader') == null, {timeout: 100000});
79
+ await page.waitForFunction(() => document.querySelector('.grok-preloader') == null, {timeout: 500000});
80
80
  } catch (error) {
81
81
  throw error;
82
82
  }
package/src/const.ts CHANGED
@@ -2,3 +2,24 @@ import * as ui from 'datagrok-api/ui';
2
2
  import * as grok from 'datagrok-api/grok';
3
3
  import * as DG from 'datagrok-api/dg';
4
4
 
5
+ export const jsonSdfMonomerLibDict = {
6
+ 'monomerType': null,
7
+ 'smiles': null,
8
+ 'name': 'MonomerName',
9
+ 'author': null,
10
+ 'molfile': 'molecule',
11
+ 'naturalAnalog': 'MonomerNaturalAnalogCode',
12
+ 'rgroups': 'MonomerCaps',
13
+ 'createDate': null,
14
+ 'id': null,
15
+ 'polymerType': 'MonomerType',
16
+ 'symbol': 'MonomerCode'
17
+ };
18
+
19
+ export const RGROUP_FIELD = 'rgroups';
20
+ export const CAP_GROUP_SMILES = 'capGroupSmiles';
21
+ export const RGROUP_ALTER_ID = 'alternateId';
22
+ export const CAP_GROUP_NAME = 'capGroupName';
23
+ export const RGROUP_LABEL = 'label';
24
+ export const MONOMER_SYMBOL = 'symbol';
25
+ export const SDF_MONOMER_NAME = 'MonomerName';
@@ -9,7 +9,7 @@ import './tests/msa-tests';
9
9
  import './tests/sequence-space-test';
10
10
  import './tests/activity-cliffs-tests';
11
11
  import './tests/splitters-test';
12
- import './tests/renderer-test';
12
+ import './tests/renderers-test';
13
13
  import './tests/convert-test';
14
14
 
15
15
  export const _package = new DG.Package();
package/src/package.ts CHANGED
@@ -15,10 +15,9 @@ import {getEmbeddingColsNames, sequenceSpace} from './utils/sequence-space';
15
15
  import {AvailableMetrics} from '@datagrok-libraries/ml/src/typed-metrics';
16
16
  import {getActivityCliffs} from '@datagrok-libraries/ml/src/viewers/activity-cliffs';
17
17
  import {sequenceGetSimilarities, drawTooltip} from './utils/sequence-activity-cliffs';
18
- import {getMolfilesFromSeq, HELM_CORE_LIB_FILENAME} from './utils/utils';
18
+ import {createJsonMonomerLibFromSdf, getMolfilesFromSeq, HELM_CORE_LIB_FILENAME} from './utils/utils';
19
19
  import {getMacroMol} from './utils/atomic-works';
20
20
  import {MacromoleculeSequenceCellRenderer} from './utils/cell-renderer';
21
- import {delay} from '@datagrok-libraries/utils/src/test';
22
21
  import {convert} from './utils/convert';
23
22
 
24
23
  //tags: init
@@ -209,7 +208,8 @@ export async function multipleSequenceAlignmentAny(table: DG.DataFrame, col: DG.
209
208
  if (!checkInputColumn(col, 'MSA', ['fasta'], ['DNA', 'RNA', 'PT']))
210
209
  return null;
211
210
 
212
- const msaCol = await runKalign(col, false);
211
+ const unUsedName = table.columns.getUnusedName(`msa(${col.name})`);
212
+ const msaCol = await runKalign(col, false, unUsedName);
213
213
  table.columns.add(msaCol);
214
214
 
215
215
  // This call is required to enable cell renderer activation
@@ -245,7 +245,15 @@ export async function compositionAnalysis(): Promise<void> {
245
245
  return;
246
246
  }
247
247
 
248
- tv.addViewer('WebLogo', {sequenceColumnName: col.name});
248
+ const wlViewer = tv.addViewer('WebLogo', {sequenceColumnName: col.name});
249
+ grok.shell.tv.dockManager.dock(wlViewer, DG.DOCK_TYPE.DOWN, null, 'Composition analysis', 0.25);
250
+ }
251
+
252
+ //top-menu: Bio | Sdf to Json lib...
253
+ //name: sdfToJsonLib
254
+ //input: dataframe table
255
+ export async function sdfToJsonLib(table: DG.DataFrame) {
256
+ const jsonMonomerLibrary = createJsonMonomerLibFromSdf(table);
249
257
  }
250
258
 
251
259
  // helper function for importFasta
@@ -325,7 +333,7 @@ export function importFasta(fileContent: string): DG.DataFrame [] {
325
333
  ])];
326
334
  }
327
335
 
328
- //name: Bio | Convert
336
+ //name: Bio | Convert ...
329
337
  //friendly-name: Bio | Convert
330
338
  //tags: panel, bio
331
339
  //input: column col {semType: Macromolecule}
@@ -83,7 +83,7 @@ MKP---SEYV
83
83
 
84
84
  separatorGaps: `seq
85
85
  F/W//P/H//E/Y
86
- //Y/N/R/Q/W/Y/V//
86
+ /Y/N/R/Q/W/Y/V/
87
87
  M/K/P////S/E/Y/V
88
88
  `,
89
89
 
@@ -133,6 +133,7 @@ PEPTIDE1{M.K.P.*.*.*.S.E.Y.V}$$$
133
133
  }
134
134
 
135
135
  // FASTA tests
136
+ // fasta -> separator
136
137
  test('testFastaPtToSeparator', async () => {
137
138
  await _testConvert(Samples.fastaPt, converter(NOTATION.SEPARATOR, '-'), Samples.separatorPt);
138
139
  });
@@ -142,7 +143,11 @@ PEPTIDE1{M.K.P.*.*.*.S.E.Y.V}$$$
142
143
  test('testFastaRnaToSeparator', async () => {
143
144
  await _testConvert(Samples.fastaRna, converter(NOTATION.SEPARATOR, '*'), Samples.separatorRna);
144
145
  });
146
+ test('testFastaGapsToSeparator', async () => {
147
+ await _testConvert(Samples.fastaGaps, converter(NOTATION.SEPARATOR, '/'), Samples.separatorGaps);
148
+ });
145
149
 
150
+ // fasta -> helm
146
151
  test('testFastaPtToHelm', async () => {
147
152
  await _testConvert(Samples.fastaPt, converter(NOTATION.HELM), Samples.helmPt);
148
153
  });
@@ -152,16 +157,13 @@ PEPTIDE1{M.K.P.*.*.*.S.E.Y.V}$$$
152
157
  test('testFastaRnaToHelm', async () => {
153
158
  await _testConvert(Samples.fastaRna, converter(NOTATION.HELM), Samples.helmRna);
154
159
  });
155
-
156
- test('testFastaGapsToSeparator', async () => {
157
- await _testConvert(Samples.fastaGaps, converter(NOTATION.SEPARATOR, '/'), Samples.separatorGaps);
158
- });
159
160
  test('testFastaGapsToHelm', async () => {
160
- await _testConvert(Samples.fastaGaps, converter(NOTATION.SEPARATOR), Samples.helmGaps);
161
+ await _testConvert(Samples.fastaGaps, converter(NOTATION.HELM), Samples.helmGaps);
161
162
  });
162
163
 
163
164
 
164
165
  // SEPARATOR tests
166
+ // separator -> fasta
165
167
  test('testSeparatorPtToFasta', async () => {
166
168
  await _testConvert(Samples.separatorPt, converter(NOTATION.FASTA), Samples.fastaPt);
167
169
  });
@@ -171,7 +173,11 @@ PEPTIDE1{M.K.P.*.*.*.S.E.Y.V}$$$
171
173
  test('testSeparatorRnaToFasta', async () => {
172
174
  await _testConvert(Samples.separatorRna, converter(NOTATION.FASTA), Samples.fastaRna);
173
175
  });
176
+ test('testSeparatorGapsToFasta', async () => {
177
+ await _testConvert(Samples.separatorGaps, converter(NOTATION.FASTA), Samples.fastaGaps);
178
+ });
174
179
 
180
+ // separator -> helm
175
181
  test('testSeparatorPtToHelm', async () => {
176
182
  await _testConvert(Samples.separatorPt, converter(NOTATION.HELM), Samples.helmPt);
177
183
  });
@@ -181,13 +187,31 @@ PEPTIDE1{M.K.P.*.*.*.S.E.Y.V}$$$
181
187
  test('testSeparatorRnaToHelm', async () => {
182
188
  await _testConvert(Samples.separatorRna, converter(NOTATION.HELM), Samples.helmRna);
183
189
  });
184
- test('testSeparatorGapsToFasta', async () => {
185
- await _testConvert(Samples.separatorGaps, converter(NOTATION.FASTA), Samples.fastaGaps);
186
- });
187
190
  test('testSeparatorGapsToHelm', async () => {
188
191
  await _testConvert(Samples.separatorGaps, converter(NOTATION.HELM), Samples.helmGaps);
189
192
  });
190
193
 
191
194
 
192
- // HELM tests: TODO
195
+ // HELM tests
196
+ // helm -> fasta
197
+ test('HelmDnaToFasta', async () => {
198
+ await _testConvert(Samples.helmDna, converter(NOTATION.FASTA), Samples.fastaDna);
199
+ });
200
+ test('HelmRnaToFasta', async () => {
201
+ await _testConvert(Samples.helmRna, converter(NOTATION.FASTA), Samples.fastaRna);
202
+ });
203
+ test('HelmPtToFasta', async () => {
204
+ await _testConvert(Samples.helmPt, converter(NOTATION.FASTA), Samples.fastaPt);
205
+ });
206
+
207
+ // helm -> separator
208
+ test('HelmDnaToSeparator', async () => {
209
+ await _testConvert(Samples.helmDna, converter(NOTATION.SEPARATOR), Samples.separatorDna);
210
+ });
211
+ test('HelmRnaToSeparator', async () => {
212
+ await _testConvert(Samples.helmRna, converter(NOTATION.SEPARATOR, '*'), Samples.separatorRna);
213
+ });
214
+ test('HelmPtToSeparator', async () => {
215
+ await _testConvert(Samples.helmPt, converter(NOTATION.SEPARATOR, '-'), Samples.separatorPt);
216
+ });
193
217
  });
@@ -113,6 +113,7 @@ MWRSWY-CKHP
113
113
  testIdCsv = 'testIdCsv',
114
114
  testSmilesCsv = 'testSmilesCsv',
115
115
  testSmiles2Csv = 'testSmiles2Csv',
116
+ testCerealCsv = 'testCerealCsv',
116
117
  }
117
118
 
118
119
  const samples: { [key: string]: string } = {
@@ -128,6 +129,7 @@ MWRSWY-CKHP
128
129
  'testIdCsv': 'System:AppData/Bio/tests/testId.csv',
129
130
  'testSmilesCsv': 'System:AppData/Bio/tests/testSmiles.csv',
130
131
  'testSmiles2Csv': 'System:AppData/Bio/tests/testSmiles2.csv',
132
+ 'testCerealCsv': 'System:AppData/Bio/tests/testCereal.csv',
131
133
  };
132
134
 
133
135
  const _samplesDfs: { [key: string]: Promise<DG.DataFrame> } = {};
@@ -306,6 +308,10 @@ MWRSWY-CKHP
306
308
  test('samplesFastaPtPosSequence', async () => {
307
309
  await (_testPos(readSamples(Samples.fastaPtCsv), 'sequence', 'fasta:SEQ:PT'));
308
310
  });
311
+
312
+ test('samplesTestCerealNegativeCerealName', async () => {
313
+ await (_testNeg(readSamples(Samples.testCerealCsv), 'cereal_name'));
314
+ });
309
315
  });
310
316
 
311
317
  export async function _testNeg(readDf: DfReaderFunc, colName: string) {
@@ -1,9 +1,11 @@
1
- import {after, before, category, test, expect, expectObject} from '@datagrok-libraries/utils/src/test';
1
+ import {after, before, category, expect, test} from '@datagrok-libraries/utils/src/test';
2
2
 
3
3
  import * as grok from 'datagrok-api/grok';
4
- import * as ui from 'datagrok-api/ui';
5
4
  import * as DG from 'datagrok-api/dg';
6
5
  import {importFasta, multipleSequenceAlignmentAny} from '../package';
6
+ import {readDataframe} from './utils';
7
+ import {convertDo} from '../utils/convert';
8
+ import {NOTATION} from '@datagrok-libraries/bio/src/utils/notation-converter';
7
9
 
8
10
  category('renderers', () => {
9
11
  let tvList: DG.TableView[];
@@ -23,42 +25,49 @@ category('renderers', () => {
23
25
  await _testAfterMsa();
24
26
  });
25
27
 
28
+ test('afterConvert', async () => {
29
+ await _testAfterConvert();
30
+ });
31
+
26
32
  async function _testAfterMsa() {
27
33
  const fastaTxt: string = await grok.dapi.files.readAsText('System:AppData/Bio/samples/sample_FASTA.fasta');
28
34
  const df: DG.DataFrame = importFasta(fastaTxt)[0];
29
- // await grok.data.detectSemanticTypes(df);
30
-
31
- const srcSeqCol: DG.Column | null = df.col('sequence');
32
- expect(srcSeqCol !== null, true);
33
- console.log('Bio: tests/renderers/afterMsa, src data loaded');
34
-
35
35
  const tv: DG.TableView = grok.shell.addTableView(df);
36
+ await grok.data.detectSemanticTypes(df);
36
37
  console.log('Bio: tests/renderers/afterMsa, table view');
37
38
 
38
- // await grok.data.detectSemanticTypes(df);
39
- console.log('Bio: tests/renderers/afterMsa, detectSemanticTypes');
39
+ const srcSeqCol: DG.Column | null = df.col('sequence');
40
+ expect(srcSeqCol !== null, true);
40
41
 
41
42
  console.log('Bio: tests/renderers/afterMsa, src before test ' +
42
43
  `semType="${srcSeqCol!.semType}", units="${srcSeqCol!.getTag(DG.TAGS.UNITS)}", ` +
43
44
  `cell.renderer="${srcSeqCol!.getTag('cell.renderer')}"`);
44
45
  expect(srcSeqCol!.semType, DG.SEMTYPE.MACROMOLECULE);
45
46
  expect(srcSeqCol!.getTag(DG.TAGS.UNITS), 'fasta:SEQ:PT');
46
- // TODO: Find the way to check renderer for columns
47
47
  expect(srcSeqCol!.getTag('cell.renderer'), 'Macromolecule');
48
- console.log('Bio: tests/renderers/afterMsa, src semType tested');
49
48
 
50
49
  const msaSeqCol: DG.Column | null = await multipleSequenceAlignmentAny(df, srcSeqCol!);
51
- console.log('Bio: tests/renderers/afterMsa, msaSeqCol created');
52
-
53
50
  tv.grid.invalidate();
54
- console.log('Bio: tests/renderers/afterMsa, tv.grid invalidated');
55
51
 
56
52
  expect(msaSeqCol!.semType, DG.SEMTYPE.MACROMOLECULE);
57
53
  expect(msaSeqCol!.getTag(DG.TAGS.UNITS), 'fasta:SEQ.MSA:PT');
58
54
  expect(msaSeqCol!.getTag('cell.renderer'), 'Macromolecule');
59
- console.log('Bio: tests/renderers/afterMsa, msa semType tested');
60
55
 
61
56
  dfList.push(df);
62
57
  tvList.push(tv);
63
58
  }
59
+
60
+ async function _testAfterConvert() {
61
+ const csv: string = await grok.dapi.files.readAsText('System:AppData/Bio/samples/sample_FASTA_PT.csv');
62
+ const df: DG.DataFrame = DG.DataFrame.fromCsv(csv);
63
+ const tv: DG.TableView = grok.shell.addTableView(df);
64
+ await grok.data.detectSemanticTypes(df);
65
+
66
+ const srcCol: DG.Column = df.col('sequence')!;
67
+ const tgtCol: DG.Column = await convertDo(srcCol, NOTATION.SEPARATOR, '/');
68
+ expect(tgtCol.getTag('cell.renderer'), 'Macromolecule');
69
+
70
+ tvList.push(tv);
71
+ dfList.push(df);
72
+ };
64
73
  });
@@ -21,10 +21,17 @@ category('splitters', () => {
21
21
  ['meI', 'hHis', 'Aca', 'N', 'T', 'dK', 'Thr_PO3H2', 'Aca',
22
22
  'D-Tyr_Et', 'D-Dap', 'dV', 'E', 'N', 'pnG', 'Phe_4Me']
23
23
  ],
24
+ // HELM editor dialog returns HELM string with multichar monomer names in square brackets
25
+ helm3: [
26
+ 'PEPTIDE1{[meI].[hHis].[Aca].N.T.[dK].[Thr_PO3H2].[Aca].[D-Tyr_Et].[D-Dap].[dV].E.N.[pnG].[Phe_4Me]}$$$',
27
+ ['meI', 'hHis', 'Aca', 'N', 'T', 'dK', 'Thr_PO3H2', 'Aca',
28
+ 'D-Tyr_Et', 'D-Dap', 'dV', 'E', 'N', 'pnG', 'Phe_4Me']
29
+ ],
24
30
  };
25
31
 
26
32
  test('helm1', async () => { await _testHelmSplitter(data.helm1[0], data.helm1[1]); });
27
33
  test('helm2', async () => { await _testHelmSplitter(data.helm2[0], data.helm2[1]); });
34
+ test('helm3-multichar', async () => { await _testHelmSplitter(data.helm3[0], data.helm3[1]); });
28
35
  });
29
36
 
30
37
  export async function _testHelmSplitter(src: string, tgt: string[]) {