Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Langage
Langage Toutes vos questions sur les scripts Perl en général. Avant de poster, veuillez consulter les FAQs perl, les cours Perl, les critiques de livres et les sources Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/12/2012, 17h07   #1
karaudrey88
Nouveau Membre du Club
 
Femme
Étudiant
Inscription : mars 2012
Messages : 63
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Service public

Informations forums :
Inscription : mars 2012
Messages : 63
Points : 29
Points : 29
Par défaut dépendance entre les jobs lancés depuis perl

Bonjour,
J'ai commencé un script perl qui lance plusieurs jobs a l'aide d'un qsub sur un cluster. Mais certains calculs doivent être finis avant que les autres commencent. J'ai commencé a mettre des dependances, mais j'ai une erreur que je ne comprend pas. Quelqu'un pourrait il m'aider?
Voici le début de mon code
Code :
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
#!/usr/bin/perl
 
use strict;
use warnings;
 
use Getopt::Long;
my(%extract_jobs_id,$gtf,$submit,$hold_jid);
GetOptions(	"gtf:s" => \$gtf,
		"submit:s" => \$submit);
$submit ||= "no";
if (!defined $gtf) {
	die "Error : missing gtf file\n";
}
my (@gtf_files);
if (!defined $gtf) {
	die "Error : define input gtf file(s) with -gtf file1.gtf[,file2.gtf]\n";
} else {
	@gtf_files = split(",",$gtf);
}
foreach my $gtf (@gtf_files) {
	#create a directory for each bam
	my @nn=split(/\./,$gtf); 
	my $prefix=$nn[0];
	my $command = "mkdir $prefix";
	qx{$command};
 
 
	#generate qsub file and launch it
	my $qsuboutfile = "$prefix\_transcripts_extraction.qsub";
	open (QSUB,">$prefix/$qsuboutfile")or die "\nError : $qsuboutfile file could not be created: $!\n";
	print QSUB qq(#!/bin/bash
#\$ -S /bin/bash
#\$ -m e
#\$ -o $qsuboutfile.out
#\$ -e $qsuboutfile.err
#\$ -cwd
#\$ -q unlimitq
 
 
# command(s):
hostname >&2
awk '/ transcript_id "CUFF.*"/' ../$prefix.transcripts.gtf > $prefix\_news_exons.gtf
#sed -e "s/^Chr//" $prefix\_news_exons.gtf > $prefix\_news_exons_corrige.gtf
gffread -w $prefix\_new_transcrits.fa -g ../Danio_rerio.Zv9.69.dna.toplevel.fa $prefix\_news_exons.gtf
#gffread -w $prefix\_new_transcrits.fa -g ../Danio_rerio.Zv9.69.dna.toplevel.fa $prefix\_news_exons_corrige.gtf
);
 
	close QSUB;
 
	#launch qsub job if asked
		my $jobid;
		if ($submit eq "yes") {
			my $dependencies = "";
			if (defined $hold_jid) {
				$dependencies = "-hold_jid $hold_jid";
			}
			my $instruction = "cd $prefix/; qsub $dependencies $qsuboutfile | awk '{print \$3}' ";
			$jobid=qx{$instruction};
			chomp $jobid;
 
			print STDERR ".";
		} else {
			$extract_jobs_id{$gtf} = "";
		}
 
 
 
	if ($submit eq "yes") {
		print STDERR "\n";
	}
	if ($submit eq "yes") {
		print STDERR "scriptR";
	}
	my @blast_jobs;
 
	my $fisher_test = "$prefix\_stats.R";
	open (ROUT,">$prefix\_stats.txt") or die "\nError : $fisher_test file could not be created: $!\n";
	print ROUT qq(##read input files
mydata <- read.table("$prefix\_stats.txt")
pdf (file=paste ("$prefix\_stats.pdf"),paper="a4")
layout(matrix(1:4, 2, 2))
hist(mydata\$V4,xlab="exons length",ylab="frequency",col="blue",main="mean size of exons in transcripts")
hist(mydata\$V2,xlab="transcripts length",ylab="frequency",col="blue",main="length of transcripts")
hist(mydata\$V3,xlab="exons number",ylab="frequency",col="blue",main="number of exons in transcripts")
dev.off()
);
	close ROUT;
 
	my $qsuboutfile2 = "$prefix\_blast.qsub";
	open (QSUB,">$prefix/$qsuboutfile2")or die "\nError : $qsuboutfile2 file could not be created: $!\n";
	print QSUB qq(#!/bin/bash
#\$ -S /bin/bash
#\$ -m e
#\$ -o $qsuboutfile2.out
#\$ -e $qsuboutfile2.err
#\$ -cwd
#\$ -q unlimitq
 
# command(s):
#hostname >&2
blastall -p blastx -d nr -i $prefix\_new_transcrits.fa -e 0.00001 -o $prefix\_new_transcrits.blast 
stat_1.pl -gtf_file  -| stat_2.pl $prefix\_news_exons.gtf > $prefix\_stats.txt
);
	close QSUB;
 
	#launch qsub job if asked
	if ($submit eq "yes") {
		my $dependencies = "-hold_jid $extract_jobs_id{$gtf}";
		my $instruction = "cd $prefix/;qsub $dependencies $qsuboutfile2 | awk '{print \$3}'";
	$jobid=qx{$instruction};
	chomp $jobid;
	push (@blast_jobs,$jobid);
	print STDERR ".";
	} else {
		push (@blast_jobs,"");
		}
Et voici l'erreur générée
Citation:
scriptRUse of uninitialized value within %extract_jobs_id in concatenation (.) or string at /home/kbarrilliot/bin/annotation.pl line 108.
qsub: ERROR! invalid option argument "-hold_jid,"
karaudrey88 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 10h03   #2
Gardyen
Membre chevronné
 
Avatar de Gardyen
 
Inscription : août 2005
Messages : 494
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France

Informations forums :
Inscription : août 2005
Messages : 494
Points : 676
Points : 676
Envoyer un message via ICQ à Gardyen
l'erreur te dit tout simplement que ta valeur ligne 108 $extract_jobs_id{$gtf} n'est pas définie quand tu crées ta commande.
En fait, tu n'initialises ta valeur que si submit est à 'no', pour 'yes' tu ne fais rien, d'où le message
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
Plus les choses changent, plus elles restent les mêmes
Gardyen est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h00.


 
 
 
 
Partenaires

Hébergement Web