1 package Maasha::BGB::Common;
3 # Copyright (C) 2009 Martin A. Hansen.
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 # http://www.gnu.org/copyleft/gpl.html
22 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DESCRIPTION <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
25 # Common routines for manipulating the Biopieces Genome Browser.
28 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
36 use Maasha::Biopieces;
38 use vars qw( @ISA @EXPORT );
40 @ISA = qw( Exporter );
43 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
48 # Martin A. Hansen, December 2009.
50 # List all users directories in the ~/Data/Users
51 # directory with full path.
57 Maasha::Common::error( 'BP_WWW not set in environment' ) if not $ENV{ 'BP_WWW' };
59 @dirs = Maasha::Filesys::ls_dirs( "$ENV{ 'BP_WWW' }/Data/Users" );
61 @users = grep { $_ !~ /\/\.\.?$/ } @dirs;
63 return wantarray ? @users : \@users;
69 # Martin A. Hansen, December 2009.
71 # List all users in ~/Data/Users
75 my ( @dirs, $dir, @users );
77 @dirs = list_user_dir();
79 foreach $dir ( @dirs ) {
80 push @users, ( split "/", $dir )[ -1 ];
83 return wantarray ? @users : \@users;
89 # Martin A. Hansen, December 2009.
91 # List all clades for a given user in ~/Data/Users
93 my ( $user, # user for which to return clades
98 my ( @dirs, @clades );
100 Maasha::Common::error( 'BP_WWW not set in environment' ) if not $ENV{ 'BP_WWW' };
101 Maasha::Common::error( 'no user specified' ) if not $user;
103 @dirs = Maasha::Filesys::ls_dirs( "$ENV{ 'BP_WWW' }/Data/Users/$user" );
105 @clades = grep { $_ !~ /\/\.\.?$/ } @dirs;
107 return wantarray ? @clades : \@clades;
113 # Martin A. Hansen, December 2009.
115 # List all clades for a given user in ~/Data/Users
117 my ( $user, # user for which to return clades
122 my ( @dirs, $dir, @clades );
124 @dirs = list_clade_dir( $user );
126 foreach $dir ( @dirs ) {
127 push @clades, ( split "/", $dir )[ -1 ];
130 return wantarray ? @clades : \@clades;
136 # Martin A. Hansen, December 2009.
138 # List all genomes for a given user and clade in ~/Data/Users
140 my ( $user, # user for which to return genomes
141 $clade, # clade for which to return genomes
146 my ( @dirs, @genomes );
148 Maasha::Common::error( 'BP_WWW not set in environment' ) if not $ENV{ 'BP_WWW' };
149 Maasha::Common::error( 'no user specified' ) if not $user;
150 Maasha::Common::error( 'no clade specified' ) if not $clade;
152 @dirs = Maasha::Filesys::ls_dirs( "$ENV{ 'BP_WWW' }/Data/Users/$user/$clade" );
154 @genomes = grep { $_ !~ /\/\.\.?$/ } @dirs;
156 return wantarray ? @genomes : \@genomes;
162 # Martin A. Hansen, December 2009.
164 # List all genomes for a given user and clade in ~/Data/Users
166 my ( $user, # user for which to return genomes
167 $clade, # clade for which to return genomes
172 my ( @dirs, $dir, @genomes );
174 @dirs = list_genome_dir( $user, $clade );
176 foreach $dir ( @dirs ) {
177 push @genomes, ( split "/", $dir )[ -1 ];
180 return wantarray ? @genomes : \@genomes;
184 sub list_assembly_dir
186 # Martin A. Hansen, December 2009.
188 # List all assemblies for a given user and clade and genome in ~/Data/Users
190 my ( $user, # user for which to return assemblies
191 $clade, # clade for which to return assemblies
192 $genome, # genome for which to return assemblies
197 my ( @dirs, @assemblies );
199 Maasha::Common::error( 'BP_WWW not set in environment' ) if not $ENV{ 'BP_WWW' };
200 Maasha::Common::error( 'no user specified' ) if not $user;
201 Maasha::Common::error( 'no clade specified' ) if not $clade;
202 Maasha::Common::error( 'no genome specified' ) if not $genome;
204 @dirs = Maasha::Filesys::ls_dirs( "$ENV{ 'BP_WWW' }/Data/Users/$user/$clade/$genome" );
206 @assemblies = grep { $_ !~ /\/\.\.?$/ } @dirs;
208 return wantarray ? @assemblies : \@assemblies;
214 # Martin A. Hansen, December 2009.
216 # List all assemblies for a given user and clade and genome in ~/Data/Users
218 my ( $user, # user for which to return assemblies
219 $clade, # clade for which to return assemblies
220 $genome, # genome for which to return assemblies
225 my ( @dirs, $dir, @assemblies );
227 @dirs = list_assembly_dir( $user, $clade, $genome );
229 foreach $dir ( @dirs ) {
230 push @assemblies, ( split "/", $dir )[ -1 ];
233 return wantarray ? @assemblies : \@assemblies;
239 # Martin A. Hansen, December 2009.
241 # List all assemblies for a given user->clade->genome->assembly in ~/Data/Users
243 my ( $user, # user for which to return contigs
244 $clade, # clade for which to return contigs
245 $genome, # genome for which to return contigs
246 $assembly, # assembly for which to return contigs
251 my ( @dirs, @contigs );
253 Maasha::Common::error( 'BP_WWW not set in environment' ) if not $ENV{ 'BP_WWW' };
254 Maasha::Common::error( 'no user specified' ) if not $user;
255 Maasha::Common::error( 'no clade specified' ) if not $clade;
256 Maasha::Common::error( 'no genome specified' ) if not $genome;
257 Maasha::Common::error( 'no assembly specified' ) if not $assembly;
259 @dirs = Maasha::Filesys::ls_dirs( "$ENV{ 'BP_WWW' }/Data/Users/$user/$clade/$genome/$assembly" );
261 @contigs = grep { $_ !~ /\/\.\.?$/ } @dirs;
263 return wantarray ? @contigs : \@contigs;
269 # Martin A. Hansen, December 2009.
271 # List all contigs for a given user->clade->genome->assembly in ~/Data/Users
273 my ( $user, # user for which to return contigs
274 $clade, # clade for which to return contigs
275 $genome, # genome for which to return contigs
276 $assembly, # assembly for which to return contigs
281 my ( @dirs, $dir, @contigs );
283 @dirs = list_contig_dir( $user, $clade, $genome, $assembly );
285 foreach $dir ( @dirs ) {
286 push @contigs, ( split "/", $dir )[ -1 ];
289 return wantarray ? @contigs : \@contigs;
295 # Martin A. Hansen, December 2009.
297 # List all tracks for a given user->clade->genome->assembly->contig in ~/Data/Users
299 my ( $user, # user for which to return tracks
300 $clade, # clade for which to return tracks
301 $genome, # genome for which to return tracks
302 $assembly, # assembly for which to return tracks
303 $contig, # contig for which to return tracks
308 my ( @dirs, @tracks );
310 Maasha::Common::error( 'BP_WWW not set in environment' ) if not $ENV{ 'BP_WWW' };
311 Maasha::Common::error( 'no user specified' ) if not $user;
312 Maasha::Common::error( 'no clade specified' ) if not $clade;
313 Maasha::Common::error( 'no genome specified' ) if not $genome;
314 Maasha::Common::error( 'no assembly specified' ) if not $assembly;
315 Maasha::Common::error( 'no contig specified' ) if not $contig;
317 if ( -d "$ENV{ 'BP_WWW' }/Data/Users/$user/$clade/$genome/$assembly/$contig/Tracks" ) {
318 @dirs = Maasha::Filesys::ls_dirs( "$ENV{ 'BP_WWW' }/Data/Users/$user/$clade/$genome/$assembly/$contig/Tracks" );
321 @tracks = grep { $_ !~ /\/\.\.?$/ } @dirs;
323 return wantarray ? @tracks : \@tracks;
329 # Martin A. Hansen, December 2009.
331 # List all tracks for a given user->clade->genome->assembly->contig in ~/Data/Users
333 my ( $user, # user for which to return tracks
334 $clade, # clade for which to return tracks
335 $genome, # genome for which to return tracks
336 $assembly, # assembly for which to return tracks
337 $contig, # contig for which to return tracks
342 my ( @dirs, $dir, @tracks );
344 @dirs = list_track_dir( $user, $clade, $genome, $assembly, $contig );
346 foreach $dir ( @dirs ) {
347 push @tracks, ( split "/", $dir )[ -1 ];
350 return wantarray ? @tracks : \@tracks;
356 # Martin A. Hansen, December 2009.
358 # Traverses all contigs for a given user->clade->genome->assembly and
359 # returns the maximum track's prefix value eg. 20 for 20_Genbank.
369 my ( @contigs, $contig, @tracks, $max );
371 @contigs = list_contigs( $user, $clade, $genome, $assembly );
373 foreach $contig ( @contigs ) {
374 push @tracks, list_tracks( $user, $clade, $genome, $assembly, $contig );
377 @tracks = sort @tracks;
379 if ( scalar @tracks > 0 and $tracks[ -1 ] =~ /^(\d+)/ ) {
389 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<