[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.3 - (view) (download) (as text)

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3