[Bio] / FigKernelScripts / index_anno_clearinghouse.pl Repository:
ViewVC logotype

Annotation of /FigKernelScripts/index_anno_clearinghouse.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (view) (download) (as text)

1 : olson 1.1 use strict;
2 :     use NRTools;
3 :     use FIG;
4 :     use DB_File;
5 :    
6 :     #
7 :     # Create the btree indexes on an annotation clearinghouse.
8 :     #
9 :     # anno.btree: id => annotation
10 :     # org.btree: id => organism
11 :     # orgnum.btree: orgname => numeric id
12 :     # orgname.btree: numeric id => orgname
13 :     #
14 :    
15 : olson 1.2 my $usage = "index_anno_clearinghouse SEED-directory target-directory";
16 : olson 1.1
17 : olson 1.2 @ARGV == 2 or die $usage;
18 : olson 1.1
19 :     my $dir_seed = shift;
20 :     my $dir_target = shift;
21 :    
22 :     &FIG::verify_dir($dir_target);
23 :    
24 : olson 1.2 my $dir_nr = "$dir_target/NR";
25 :    
26 : olson 1.1 my %NR_files;
27 :    
28 : olson 1.3 $DB_BTREE->{flags} = R_DUP;
29 :    
30 : olson 1.1 #
31 :     # Scan inputs.
32 :     #
33 :    
34 :     print "Scan NR\n";
35 :     scan_NR_dir(\%NR_files, $dir_nr);
36 :     print "Scan SEED\n";
37 :     scan_seed_dir(\%NR_files, $dir_seed);
38 :     #scan_seed_dir(\%NR_files, $dir_seed, { limit => 10 });
39 :    
40 :     #
41 :     # Create btrees. Empty existing files if present.
42 :     #
43 :     my $func_file = "$dir_target/anno.btree";
44 :     my $org_file = "$dir_target/org.btree";
45 :     my $orgname_file = "$dir_target/orgname.btree";
46 :     my $orgnum_file = "$dir_target/orgnum.btree";
47 : olson 1.3 my $alias_file = "$dir_target/alias.btree";
48 : olson 1.1
49 :     my $next_orgnum = 1;
50 :    
51 :     -f $func_file and unlink($func_file);
52 :     -f $org_file and unlink($org_file);
53 :     -f $orgname_file and unlink($orgname_file);
54 : olson 1.2 -f $orgnum_file and unlink($orgnum_file);
55 : olson 1.3 -f $alias_file and unlink($alias_file);
56 : olson 1.1 my %func;
57 :     my $func_tie = tie %func, 'DB_File', $func_file, O_RDWR | O_CREAT, 0666, $DB_BTREE;
58 :     $func_tie or die "Cannot create bree $func_file: $!\n";
59 :    
60 :     my %org;
61 :     my $org_tie = tie %org, 'DB_File', $org_file, O_RDWR | O_CREAT, 0666, $DB_BTREE;
62 :     $org_tie or die "Cannot create bree $org_file: $!\n";
63 :    
64 :     my %orgname;
65 :     my $orgname_tie = tie %orgname, 'DB_File', $orgname_file, O_RDWR | O_CREAT, 0666, $DB_BTREE;
66 :     $orgname_tie or die "Cannot create bree $orgname_file: $!\n";
67 :    
68 :     my %orgnum;
69 :     my $orgnum_tie = tie %orgnum, 'DB_File', $orgnum_file, O_RDWR | O_CREAT, 0666, $DB_BTREE;
70 :     $orgnum_tie or die "Cannot create bree $orgnum_file: $!\n";
71 :    
72 : olson 1.3 my %alias;
73 :     my $alias_tie = tie %alias, 'DB_File', $alias_file, O_RDWR | O_CREAT, 0666, $DB_BTREE;
74 :     $alias_tie or die "Cannot create bree $alias_file: $!\n";
75 :    
76 : olson 1.1 for my $ent (values %NR_files)
77 :     {
78 :     if ($ent->{type} eq 'seed_org')
79 :     {
80 :     my $af = "$ent->{path}/assigned_functions";
81 :    
82 :     my $org = &FIG::file_head("$ent->{path}/GENOME", 1);
83 :     chomp $org;
84 :     my $orgnum = get_orgnum($org);
85 :     print "Process $ent->{path} ($org)\n";
86 :    
87 :     next unless -f $af;
88 :     my %seen;
89 :     open(A, "tac $af|") or die "cannot open tac $af pipe: $!\n";
90 :     while (<A>)
91 :     {
92 :     if (/^(fig\|\d+\.\d+\.peg\.\d+)\t(.*)/)
93 :     {
94 :     next if $seen{$1};
95 :     $func{$1} = join($;, 'SEED', $2);
96 :     $org{$1} = $orgnum;
97 :    
98 :     $seen{$1}++;
99 :    
100 :     }
101 :     }
102 :     close(A);
103 :     }
104 :     else
105 :     {
106 :     my $org_file = "$ent->{path}/org.table";
107 :     my $func_file = "$ent->{path}/assigned_functions";
108 :    
109 :     if (open(OF, "<$org_file"))
110 :     {
111 :     print "Process $org_file\n";
112 :     while (<OF>)
113 :     {
114 :     chomp;
115 :     my($id, $org) = split(/\t/);
116 : olson 1.3 my $val = get_orgnum($org);
117 :     $org{$id} = $val;
118 :     # map { $org{$_} = $val } map_id($id);
119 : olson 1.1 }
120 :     close(OF);
121 :     }
122 :     if (open(FF, "<$func_file"))
123 :     {
124 :     print "Process $func_file\n";
125 :     while (<FF>)
126 :     {
127 :     chomp;
128 :     my($id, $func) = split(/\t/);
129 : olson 1.3 my $val = join($;, $ent->{name}, $func);
130 :     $func{$id} = $val;
131 :     #map { $func{$_} = $val } map_id($id);
132 :    
133 :     if ($id =~ /^[^|]+\|(.*)/)
134 :     {
135 :     $alias{$1} = $id;
136 :     }
137 : olson 1.1 }
138 :     close(FF);
139 :     }
140 :     }
141 :     $func_tie->sync();
142 :     $org_tie->sync();
143 :     $orgname_tie->sync();
144 :     $orgnum_tie->sync();
145 : olson 1.3 $alias_tie->sync();
146 : olson 1.1 }
147 :    
148 :     sub get_orgnum
149 :     {
150 :     my($org) = @_;
151 :    
152 :     my $num = $orgnum{$org};
153 :     if (!defined($num))
154 :     {
155 :     $num = $next_orgnum++;
156 :     $orgnum{$org} = $num;
157 :     $orgname{$num} = $org;
158 :     }
159 :     return $num
160 :     }
161 : olson 1.3
162 :     sub map_id
163 :     {
164 :     my($id) = @_;
165 :    
166 :     if ($id =~ /^[^|]+\|(.*)/)
167 :     {
168 :     return ($id, $1);
169 :     }
170 :     else
171 :     {
172 :     return ($id);
173 :     }
174 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3