This file is indexed.

/usr/share/biomaj/conf/process/fastacmdTLSE.pl is in biomaj 1.2.3-11.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  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
#!/usr/bin/perl
#
#
# Author : Genopole Toulouse - Yoann.Beausse@toulouse.inra.fr
#
#-------------------------------------------------------------------------------

=head1 NAME

fastacmdTLSE.pl - Generation de fichiers fasta a partir d'index blast

=head1 SYNOPSIS

fastacmdTLSE.pl [--dbname myBank] [--bank bankName1,[bankName2],...] [--fasta fastaFile1,[fastaFile2],...] 
                [--compress T/F] [--execute system] [--test] [--verbose] [--help]

=head1 Description

Ce script fait partie des PostProcess de BioMaJ.
Permet de generer un fichier fasta a partir des index blast d'une banque.

=over 10

=item * Generation de fichiers fasta a partir des index blast d'une banque via fastacmd

=item * Test la validite du fichier obtenu

=item * Creation d'un lien symbolique 'blast' sur le repertoire flat du repertoire de production de la banque BioMaJ

=item * Creation d'un fichier alias blast dans le repertoire pointe par la variable d'environnement $BLASTDB

=back

=head1 VERSION

Version 0.9
March 2007

=head1 COPYRIGHT

This program is distributed under the CeCILL License. (http://www.cecill.info)

=head1 ARGUMENTS

B<--dbname (-d) myBank>

	BioMaJ bank name 
	default = $ENV{dbname}

B<--bank (-b) 'bankName1[ bankName2[ bankName3]]'>

	Liste des banques blast dont un fichier fasta doit etre genere.
	Si l'option n'est pas renseignee, c'est --dbname qui sera utilise.
	Les noms de banques doivent etre separes par des espaces.
	Ex : --bank 'bank_prot bank_nuc'.
        default = [valeur de --dbname]

B<--fasta (-f) 'fastaFile1[ fastaFile2[ fastaFile3]]'>

	Nom des fichiers fasta pour chaque banque de --bank
	Le premier fichier correspond a la premiere bank ect...
	Si --fasta n'est pas renseigne, le nom du fichier fasta sera le meme que le nom de la banque.
	Si --bank pocede 3 valeurs, --fasta doit comporter 3 noms de fichier ou aucun 
	(dans le cas ou on veut donner le meme nom au fichier fasta qu'aux banques) 
		default = '--bank'

B<--compress (-c) T/F>

	Compression via gzip du fichier fasta.
	defaut = T

B<--execute (-e) system>

	La ligne de commande pour la generation du fichier fasta peut etre executee sur la machine local
	ou etre transcrite dans un fichier pour une execution via un systeme de queue.
	Voir ProcessBiomajLib::executeBatch() pour une utilisation sur votre systeme.
	On doit preciser pour chaque systeme, la commande systeme a utiliser et les options via le fichier unix_command_system.cfg
	Ex pour --execute pbs : 
	 EXECUTE_BATCH_CMD_PBS=/usr/pbs/bin/qsub
	 EXECUTE_BATCH_OPTIONS_PBS=-q longq
	Par defaut, les commandes sont executees via un appel systeme classique (--execute sh)
	default = sh

B<--test (-t)> 

	Execution d'un test pour verifier la coherence du fichier fasta obtenu.
	VERSION 0.9 --> NON OPERATIONNEL

B<--verbose (-v)>

B<--help (-h)>

=head1 AUTHOR

 Yoann Beausse <Yoann.Beausse@toulouse.inra.fr>
 Plateforme Bioinformatique - Genopole Midi-Pyrenees Toulouse

=head1 COMMENTS

=head2 Prerequis

 Ce script fait appel a la librairie Perl 'ProcessBiomajLib.pm'.
 Cette librairie et fastacmdTLSE.pl doivent etre presents dans le repertoire des Process de BioMaJ :
 ($BIOMAJ_ROOT/conf/process/).
 
 Pour les appels aux commandes systeme, le fichier 'unix_command_system.cfg' doit etre renseigne,
 notament pour l'acces aux commandes 'fastacmd' et 'formatdb'.

=head2 Repertoire de sortie

 Tous les fichiers fasta produits sont places dans un repertoire nomme 'fasta' (cf $FASTA_DIR),
 au meme niveau que 'flat', le repertoire des rawdata BioMaJ.
 Un lien symbolique 'blast' (cf $BLAST_DIR) est place sur le repertoire 'flat'.

=head2 Fichier Alias Blast

 Les fichiers alias .pal ou .nal sont places par defaut dans le repertoire de la variable d'environnement 'BLASTDB'.
 Si BLASTDB n'est pas initialisee, par defaut, les alias sont places dans le repertoire 'datadir/blastdb'.
                                                                (datadir une variable defini dans BioMaJ).
 Si necessaire, le repertoire datadir/blastdb est cree a la premier execution.
 Pour Changer le nom du repertoire 'blastdb' modifiez ProcessBioamjLib::$BLASTDB_DIR ou renseignez la variable d'envirennement BLASTDB

=head2 Execution

 Il y a 2 modes d'execution .
 
 1 - mode par defaut, sur la machine locale (--execute sh).
 2 - en batch sur un cluster via une soumission a un systeme de queue. (--execute nomDuSystem) ex : pbs, sge, ...
 L execution reste sequentielle mais delocalisee.
 Pour definir un nouveau systeme, voir ProcessBiomajLib::executeBatch()

=head2 Variables d'Environnement

 BLASTDB
	Repertoire ou les fichiers alias blast seront crees.
	Si BLASTDB n'est pas renseignee, le repertoire par defaut sera 'data.dir'/blastdb 
	(data.dir = propriete de BioMaJ - voir global.properties ou myBank.properties.)

 Verification de l'environnement
    La fonction ProcessBiomajLib::checkBiomajEnvironment() verifie que l'environnement d'execution du Process est correcte pour une interaction avec BioMaJ

=head2 Warning

	Version 0.9 : L'option --test n'est pas active. Il faut revoir la fonction Test()

=head2 Exemples d'utilisation

	La Banque BioMaJ se nomme : "est"
	Exemple avec 3 banques blast dans le repertoire flat (est_human est_mouse est_other) et la banque qui regroupe les 3 autres : 
	est.nal
          est_human.nal       est_mouse.nal       est_otehr.nal
          est_human.00.nhr    est_mouse.00.nhr    est_other.00.nhr
          est_human.00.nin    est_mouse.00.nin    est_other.00.nin
          est_human.01.nhr                        est_other.01.nhr
          est_human.01.nin                        est_other.01.nin
          ...                                     ...

	1) formatdbTLSE.pl
		Par defaut, si --bank n'est pas precise, l'argument recoit le nom de la banque BioMaJ.
		De meme, si --fasta n'est pas precise, il recoit la valeur de --bank
		Ici, il y aura creation d'un fichier fasta est.gz (il y a compression via gzip par defaut) regroupant toutes les sequences de est_human, est_mouse et est_other

	2)  formatdbTLSE.pl --bank 'est_human est_mouse est_other'
	2') formatdbTLSE.pl --bank 'est_human est_mouse est_other' --fasta 'est_human est_mouse est_other'
		Il y aura creation de 3 fichiers fasta : est_human.gz est_mouse.gz est_other.gz

	3 ) formatdbTLSE.pl --bank 'est_human est_mouse est_other' --fasta 'toto1 toto2 toto3'
		Il y aura création de 3 fichiers fasta : toto1.gz(pour la banque est_human) toto2.gz(pour la banque est_mouse) toto3.gz(Pour la banque est_other)

	4 ) formatdbTLSE.pl --bank 'est_human est_mouse est_other' --fasta 'toto1 toto2'
		Ici, le programme sort sur erreur ( exit(-1) )
		Il faut le meme nombre d'argument pour --bank et --fasta

=cut


use strict;
use Getopt::Long;
use lib ("$ENV{BIOMAJ_ROOT}/conf/process/.");
use ProcessBiomajLib;

# Execute path var
my %H_CMD;

my $FASTACMD = "fastacmd";

# Arguments du programme
my $DB_NAME = "";
my ($BANK_LIST,$OUTPUT_FILE) = ("","");
my (@A_BANK_LIST,@A_OUTPUT_FILE);
my $COMPRESS = "T";
my $BATCH_SYSTEM = "sh";
my $HELP;
my $VERBOSE;
my $TEST;

# Variables globales au programme
my $PATH_BLAST_DIR;
my $PATH_FASTA_DIR;
my $PATH_FLAT_DIR;
my $PATH_BLASTDB_DIR;

my $FASTA_DIR = "fasta";
my $INDEX_DIR = "blast";

# Traitement des arguments
my $result = GetOptions ("dbname=s" => \$DB_NAME,
                         "bank=s"   => \$BANK_LIST,
                         "fasta=s"  => \$OUTPUT_FILE,
                         "compress=s" => \$COMPRESS, #T/F 
                         "execute=s"  => \$BATCH_SYSTEM,
						 "test"       => \$TEST,
						 "verbose"    => \$VERBOSE,
						 "help"       => \$HELP,
                        );

# MAIN
MAIN:{

	&usage() if ($HELP);	
	&initGlobalVar;
	
	# Creation du repertoire fasta et chdir dedans
	if ( !-e $PATH_FASTA_DIR )
	{
		mkdir "$PATH_FASTA_DIR";
		&Info("mkdir $PATH_FASTA_DIR .");
	} 
	chdir "$PATH_FASTA_DIR";

	# Recup le nombre des sous banques a traiter
	my $cpt = $#A_BANK_LIST;
	
	# Pour chaqu'une de ces sous banques
	for (my $i=0 ; $i<=$cpt ; $i++)
	{
		my $bank = $A_BANK_LIST[$i];
		my $ofile = $A_OUTPUT_FILE[$i];
		
		&computeFastaFile($bank,$ofile);
		&test() if ($TEST);
		
		my $bool_prot_seq  = &getSequenceType($ofile,$COMPRESS);
		&createAliasFile($bank,$bool_prot_seq);
	}
	
	# On place un lien symbolique blast sur le repertoire flat
	&createLinkIndexDir;

}
#############################################################################

=head1 Routines

=head2 function computeFastaFile

	Title        : computeFastaFile
	Usage        : computeFastaFile($bank,$ofile)
	Prerequiiste : none
	Fonction     : Chaine de traitement pour la banque $bank
	Returns      : none
	Args         : $bank : nom de la banque a traiter
	             : $ofile : nom du fichier de sortie fasta
	Globals      : none

=cut
sub computeFastaFile()
{
	my ($bank,$ofile) = (shift,shift);
	
	&clearOutputFiles();
	&outputFile(&createFastaFile($bank,$ofile));
	&printOutputFiles();
	return;
}

=head2 procedure createFastaFile

	Title        : createFastaFile
	Usage        : createFastaFile($bank,$ofile)
	Prerequisite : none
	Fonction     : Constitue la ligne de commande pour fastacmd et l'execute
	Returns      : none
	Args         : $bank : nom de la banque
	             : $ofile : nom du fichier fasta de sortie
	Globals      : $FASTACMD : path pour les commandes system
	             : $PATH_FLAT_DIR : path du repertoire flat de la release
	             : $COMPRESS : boolean. 1 si il faut compresser le fichiei fasta
	             : $BATCH_SYSTEM : systeme pour l'execution des lignes de commandes

=cut
sub createFastaFile
{
	my ($bank,$ofile) = (shift,shift);
	my @a_cmd;
	my $product_file = "$PATH_FASTA_DIR/$ofile";

	push (@a_cmd,"$FASTACMD -D 1 -d $PATH_FLAT_DIR/$bank -o $product_file");

	if ($COMPRESS)
	{
		push (@a_cmd,"$H_CMD{UNIX_RM} -f $product_file.gz") if (-e("$product_file.gz"));
		push (@a_cmd,"$H_CMD{UNIX_GZIP} $product_file");
		$product_file = "$product_file.gz";
	}

	&ProcessBiomajLib::executeBatch(\@a_cmd,$BATCH_SYSTEM,$bank);
	
	if ( !-e($product_file) || -z($product_file) )
	{
		&Error("Output file >$product_file< not exist or null !");
	}

	return $product_file;
}

=head2 procedure createAliasFile

	Title        : createAliasFile
	Usage        : createAliasFile($bank,$bool_prot_seq)
	Prerequisite : none
	Fonction     : Cree le fichier alias pour blast
	Returns      : none
	Args         : $bank : nom de la banque
	             : $bool_prot_seq : 1 pour prot, sinon 0
	Globals      : Variable l'environnement BLASTDB (rien n'est fait si elle n'existe pas)
	             : $BLAST_DIR : "blast"

=cut
sub createAliasFile()
{
	my ($bank,$bool_prot_seq) = (shift,shift);
	
	my $extension  = &getAliasFileExtension($bool_prot_seq);
	my $release = &ProcessBiomajLib::getRemoteRelease();
	
	my $file_alias = "$PATH_BLASTDB_DIR/$bank"."$extension";
	open (ALIAS,">$file_alias");
	print ALIAS <<END
# Alias file
TITLE $bank $release
#
DBLIST $PATH_BLAST_DIR/$bank
	
END
;
	close(ALIAS);
	return;
}

=head2 function getAliasFileExtension

	Title        : getAliasFileExtension
	Usage        : getAliasFileExtension($bool_prot_seq)
	Prerequisite : none
	Fonction     : Selectionne la bonne extension du fichier alias blast (.pal ou .nal)
	Returns      : $extension : ".pal" si prot, sinon ".nal"
	Args         : $bool_prot_seq : 1 pour prot, sinon 0
	Globals      : none

=cut
sub getAliasFileExtension()
{
	my $bool_prot_seq = shift;
	my $extension = ($bool_prot_seq) ? ".pal" : ".nal";
	
	return $extension;
}

=head2 procedure createLinkIndexDir

	Title        : createLinkIndexDir
	Usage        : createLinkIndexDir()
	Prerequisite : none
	Fonction     : Place un lien symbolique blast sur le repertoire flat
	Returns      : none
	Args         : none
	Globals      : $PATH_FLAT_DIR  : path du repertoire flat

=cut
sub createLinkIndexDir
{
	my $cmd = "";
	
	$cmd = "$H_CMD{UNIX_LN} -s $PATH_FLAT_DIR $PATH_BLAST_DIR";
	`$cmd` if ( !-e($PATH_BLAST_DIR) );
	return;
}

=head2 function test

	Title        : test
	Usage        : test()
	Prerequisite : 
	Fonction     : 
	Returns      : $bool : 1 ou 0
	Args         : 
	Globals      : 

=cut
sub test()
{
	return 1;
}

=head2 procedure initGlobalVar

	Title        : initGlobalVar
	Usage        : initGlobalVar()
	Prerequisite : none
	Fonction     : Recupere les valeurs du fichier tmp/bank.var et controle la validite des arguments
	Returns      : none
	Args         : none
	Globals      : 

=cut
sub initGlobalVar()
{	
	&ProcessBiomajLib::checkBiomajEnvironment();
	&ProcessBiomajLib::readCfgFile(\%H_CMD);
	
	### Variable specifique a la banque ###
	$DB_NAME = $ENV{'dbname'} if ( $DB_NAME eq "" );
	
	$PATH_FLAT_DIR      = &ProcessBiomajLib::getPathFuturReleaseFlatDir();
	$PATH_BLAST_DIR     = &ProcessBiomajLib::getPathFuturReleaseMyDir($INDEX_DIR);
	$PATH_FASTA_DIR     = &ProcessBiomajLib::getPathFuturReleaseMyDir($FASTA_DIR);
	
	$PATH_BLASTDB_DIR   = &ProcessBiomajLib::getPathBlastDbDir();
	
	&Error("No such flat directory for $DB_NAME bank.") if ( !-e($PATH_FLAT_DIR) );

	### Variable du programme ###
	&Error("nonvalid option : --compress $COMPRESS") if ( $COMPRESS !~ /(T|F)/ );	
	$COMPRESS    = ( $COMPRESS =~ /T/i ) ? 1 : 0;
	$BANK_LIST   = $DB_NAME   if ($BANK_LIST eq "");
	$OUTPUT_FILE = $BANK_LIST if ($OUTPUT_FILE eq "");
	
	@A_BANK_LIST   = split /\s+/, $BANK_LIST;
	@A_OUTPUT_FILE = split /\s+/, $OUTPUT_FILE;
	
	&usage("No bank of defines") if ( $#A_BANK_LIST == -1 );
	&usage("There is not the same number of bank only of output files\nOption --bank_list and --output_file_list") if ($#A_BANK_LIST != $#A_OUTPUT_FILE);
	
	$FASTACMD = $H_CMD{FASTACMD} if ( defined($H_CMD{FASTACMD}) );

	return;
}

=head2 procedure usage

	Title        : usage
	Usage        : usage($msg)
	Prerequisite : none
	Fonction     : Affiche $msg + l'usage du script + exit(1)
	Returns      : none
	Args         : $msg : message precisant l'erreur
	Globals      : none

=cut
sub usage()
{
	
	my $message = shift;
	
print STDERR "$message\n" if ( defined($message) && $message ne "" );
	
print STDOUT <<END

fastacmdTLSE.pl [--dbname myBank] [--bank bankName1,[bankName2],...] [--fasta fastaFile1,[fastaFile2],...] 
                [--compress T/F] [--execute system] [--test] [--verbose] [--help]

Arguments : 
	
	--dbname     (-d)       : bank name (BioMaJ) [deafault : $ENV{dbname}]
	--bank       (-b)       : bank name (blast)  (without extension)
	--fasta      (-f)       : output fasta file (same order that bank)
	--compress   (-c)       : T/F  [T]      (compress output fasta file)
	--execute    (-e)       : [sh]  (exec mode)
	--test       (-t)       : test le fichier fasta obtenu
	--verbose    (-v)
	--help       (-h)       : ce message

--dbname (-d) myBank

	BioMaJ bank name 
	default = $ENV{dbname}

--bank (-b) 'bankName1[ bankName2[ bankName3]]' 

	Liste des banques blast dont un fichier fasta doit etre genere.
	Si l'option n'est pas renseignee, c'est --dbname qui sera utilise.
	Les noms de banques doivent etre separes par des espaces.
	Ex : --bank 'bank_prot bank_nuc'.
		default = [valeur de --dbname]

--fasta (-f) 'fastaFile1[ fastaFile2[ fastaFile3]]'

	Nom des fichiers fasta pour chaque banque de --bank
	Le premier fichier correspond a la premiere bank ect...
	Si --fasta n'est pas renseigne, le nom du fichier fasta sera le meme que le nom de la banque.
	Si --bank pocede 3 valeurs, --fasta doit comporter 3 noms de fichier ou aucun 
	(dans le cas ou on veut donner le meme nom au fichier fasta qu'aux banques) 
		default = '--bank'
                
--compress (-c) T/F

	Compression via gzip du fichier fasta.
		defaut = T

--execute (-e) system

	La ligne de commande pour la generation du fichier fasta peut etre executee sur la machine local
	ou etre transcrite dans un fichier pour une execution via un systeme de queue.
	Voir ProcessBiomajLib::executeBatch() pour une utilisation sur votre systeme.
	On doit preciser pour chaque systeme, la commande systeme a utiliser et les options via le fichier unix_command_system.cfg
	Ex pour --execute pbs : 
	 EXECUTE_BATCH_CMD_PBS=/usr/pbs/bin/qsub
	 EXECUTE_BATCH_OPTIONS_PBS=-q longq
	Par defaut, les commandes sont executees via un appel systeme classique (--execute sh)
		default = sh

--test (-t)

	Execution d'un test pour verifier la coherence du fichier fasta obtenu.
	VERSION 0.9 --> NON OPERATIONNEL

--verbose (-v)

--help (-h)

END
;
	exit(-1);
}