[Bio] / FortyEight / compute_job_signature.pl Repository:
ViewVC logotype

Annotation of /FortyEight/compute_job_signature.pl

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : olson 1.1
2 :     use strict;
3 :     use Job48;
4 :     use Digest;
5 : olson 1.5 use Data::Dumper;
6 : olson 1.1
7 :     my $alg = 'SHA-256';
8 :    
9 :     @ARGV == 1 or @ARGV == 2 or die "Usage: $0 job-dir [outfile]\n";
10 :    
11 :     my $dir = shift;
12 :    
13 :     my $out_fh;
14 :    
15 :     if (@ARGV)
16 :     {
17 :     my $outfile = shift;
18 :    
19 :     $out_fh = new FileHandle($outfile, "w");
20 :    
21 :     $out_fh or die "Cannot open output file $outfile: $!";
22 :     }
23 :     else
24 :     {
25 :     $out_fh = \*STDOUT;
26 :     }
27 :    
28 :     my $job = new Job48($dir);
29 :    
30 :     my $meta = $job->meta;
31 :    
32 :     #
33 :     # A signature is based on the metadata keys listed in
34 :     # @signature_keys below.
35 :     #
36 :     # It also includes a checksum of the original input file.
37 :     # This is found in the raw/<genome-id>/ directory.
38 :     # If it was a genbank job, file genbank_file has the original input.
39 :     # For either genbank or fasta files we include the checksum
40 :     # of the unformatted_contigs file.
41 :     #
42 :     # The genbank signature is not a simple signature; rather it
43 :     # is a set of the signatures of the individual genbank files
44 :     # that were concatenated to form the full file. They are sorted
45 :     # on locus id.
46 :    
47 :    
48 :     my @signature_keys = qw(use_glimmer
49 : olson 1.4 annotation_scheme
50 : olson 1.5 rasttk_workflow
51 : olson 1.3 correction.disabled
52 : olson 1.1 correction.automatic
53 :     correction.backfill_gaps
54 :     correction.frameshifts
55 :     genome.genetic_code
56 :     keep_genecalls
57 :     genome.contig_count
58 :     genome.bp_count
59 :     genome.ambig_count
60 : olson 1.2 options.figfam_version
61 : olson 1.1 );
62 :    
63 :     my @sig_data;
64 :    
65 :     for my $key (@signature_keys)
66 :     {
67 :     my $val = $meta->get_metadata($key);
68 : olson 1.5 if (ref($val))
69 :     {
70 :     $val = Dumper($val);
71 :     }
72 : olson 1.1 push(@sig_data, [$key, $val]);
73 :     }
74 :    
75 :     my $raw_dir = $job->dir . "/raw/" . $job->genome_id;
76 :    
77 :     my $md5 = '';
78 :     if (open(F, "<", "$raw_dir/unformatted_contigs"))
79 :     {
80 :     my $d = Digest->new($alg);
81 :     $d->addfile(\*F);
82 :     $md5 = $d->hexdigest();
83 :     close(F);
84 :     }
85 :     push(@sig_data, ['unformatted_contigs', $md5]);
86 :    
87 :     if (open(F, "<", "$raw_dir/genbank_file"))
88 :     {
89 :     my @segs;
90 :    
91 :     my $digest = Digest->new($alg);
92 :    
93 :     my $cur;
94 :     my $l = <F>;
95 :     while (defined($l))
96 :     {
97 :     if ($l =~ /^LOCUS\s+(\S+)/)
98 :     {
99 :     $cur = $1;
100 :     $digest->add($l);
101 :     $l = <F>;
102 :     }
103 :     elsif ($l =~ m,^//$,)
104 :     {
105 :     $digest->add($l);
106 :     my $md5 = $digest->hexdigest();
107 :     push(@segs, [$cur, $md5]);
108 :     #
109 :     # Spin until we hit the next start, in case there
110 :     # was text between the files. (If anything but blank lines,
111 :     # mark it with extra crud in the @segs list).
112 :     #
113 :     $l = <F>;
114 :     while (defined($l) && $l !~ /^LOCUS/)
115 :     {
116 :     if ($l !~ /^\s*$/)
117 :     {
118 :     $digest->add($l);
119 :     }
120 :     $l = <F>;
121 :     }
122 :     push(@segs, ["gap_$cur", $digest->hexdigest()])
123 :     }
124 :     else
125 :     {
126 :     $digest->add($l);
127 :     $l = <F>;
128 :     }
129 :    
130 :     }
131 :     close(F);
132 :    
133 :     push(@sig_data, sort { $a->[0] cmp $b->[0] } @segs);
134 :     }
135 :    
136 :    
137 :     my $sig_txt = join("\n", map { join("\t", @$_) } @sig_data) . "\n";
138 :     my $digest = Digest->new($alg);
139 :     $digest->add($sig_txt);
140 :     my $sig_md5 = $digest->hexdigest;
141 :    
142 :     print $out_fh "$sig_md5\n$sig_txt";
143 :     close($out_fh);

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3