annotate cpt_psm_recombine/cpt_psm_0_prep.pl @ 0:b18e8268bf4e draft

Uploaded
author cpt
date Tue, 05 Jul 2022 05:05:13 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
1 #!/usr/bin/env perl
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
2 use strict;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
3 use warnings;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
4 use Storable;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
5 use Bio::SearchIO;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
6 use Bio::SeqIO;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
7 use Bio::Tools::CodonTable;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
8 use Data::Dumper;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
9 use File::Temp qw/tempfile tempdir/;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
10
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
11
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
12 use CPT::GalaxyGetOpt;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
13 my $ggo = CPT::GalaxyGetOpt->new();
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
14 my $options = $ggo->getOptions(
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
15 'options' => [
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
16 [ 'file', 'Input file', { validate => 'File/Input', multiple => 1, required => 1,
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
17 file_format => ['genbank', 'txt'],
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
18 } ],
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
19 ],
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
20 'outputs' => [
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
21 [
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
22 'cpt_psm_object',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
23 'Output PSM Object',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
24 {
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
25 validate => 'File/Output',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
26 required => 1,
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
27 default => 'cpt_psm',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
28 data_format => 'text/plain',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
29 default_format => 'TXT'
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
30 }
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
31 ],
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
32 ],
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
33 'defaults' => [
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
34 'appid' => 'PSM.Prep',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
35 'appname' => 'PSM Prep',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
36 'appdesc' => 'prepares data for the PSM Plotter',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
37 'appvers' => '1.94.2',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
38 ],
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
39 'tests' => [],
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
40 );
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
41
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
42
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
43
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
44 use CPT::Bio;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
45 my $bio = CPT::Bio->new();
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
46
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
47 my @genbank_files = @{$options->{file}};
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
48
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
49 my %data = (
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
50 file_list => [],
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
51 );
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
52
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
53 my $GLOBAL_UNLINK_VAR = 1;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
54 my $tempdir = tempdir('cpt.psm2.XXXXXXX',CLEANUP => $GLOBAL_UNLINK_VAR);
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
55 use CPT::Util::CRC64;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
56 my $crc = CPT::Util::CRC64->new();
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
57
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
58 foreach my $file(@genbank_files){
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
59 my $seqio_object = Bio::SeqIO->new(-file => $file,-format=>'genbank');
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
60 while(my $seqobj = $seqio_object->next_seq){
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
61 my ( $fh, $path ) = tempfile('cds_export.XXXXXXXXX', UNLINK => $GLOBAL_UNLINK_VAR, DIR => $tempdir, SUFFIX => '.fa');
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
62
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
63 my @gi_array;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
64 foreach my $feat ( $seqobj->get_SeqFeatures ) {
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
65 if($feat->primary_tag eq 'CDS'){
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
66 my $header = $bio->_getIdentifier($feat);
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
67 # This ensures proteins have a file-specific ID appeneded to them.
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
68 my $seq = $bio->translate(
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
69 $bio->intelligent_get_seq($feat));
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
70
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
71 # Proteins come with translated stop codon
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
72 $seq =~ s/\*//g;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
73 $seq =~ s/\+//g;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
74 $seq =~ s/#//g;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
75 $header .= "_" . $crc->crc64($seq);
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
76 push @gi_array, $header;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
77 print $fh ">$header\n$seq\n";
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
78 }
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
79 }
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
80 $data{gbk}{$seqobj->display_id()}{'gi'} = \@gi_array;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
81 $data{gbk}{$seqobj->display_id()}{'fasta_location'} = $path;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
82 $data{gbk}{$seqobj->display_id()}{'gbk_location'} = $file;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
83 push(@{$data{file_list}}, $seqobj->display_id());
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
84 close $fh;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
85 }
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
86 }
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
87
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
88
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
89
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
90 use IPC::Run3;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
91
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
92 # Concatenate Fasta Files
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
93 my @fasta_files;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
94 foreach(@{$data{file_list}}){
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
95 push(@fasta_files, $data{gbk}{$_}{fasta_location});
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
96 }
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
97 my @command = ('cat', @fasta_files);
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
98 my ($merged_fa_fh, $merged_fa_path) = tempfile('merged.XXXXXXXXX', UNLINK => 1, DIR => $tempdir, SUFFIX => '.fa');
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
99 my ($in, $out, $err);
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
100 run3 \@command, \$in, \$out, \$err;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
101 if($err){
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
102 print STDERR $err;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
103 }
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
104 print $merged_fa_fh $out;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
105 close($merged_fa_fh);
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
106
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
107
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
108 # Create Blast Database
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
109 my ($blastdb_fh, $blastdb_path) = tempfile('blastdb.XXXXXXXXX', UNLINK => 1, DIR => $tempdir);
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
110 @command = ('makeblastdb',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
111 '-dbtype', 'prot',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
112 '-in', $merged_fa_path,
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
113 '-out', $blastdb_path,
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
114 );
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
115 my ($makeblast_in,$makeblast_out,$makeblast_err);
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
116 run3 \@command, \$makeblast_in, \$makeblast_out, \$makeblast_err;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
117
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
118 # Blast files
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
119 foreach(@{$data{file_list}}){
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
120 #push(@fasta_files, $data{gbk}{$_}{fasta_location});
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
121 my @blast_cmd = ('blastp',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
122 '-query', $data{gbk}{$_}{fasta_location},
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
123 '-out', $data{gbk}{$_}{fasta_location} . ".xml",
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
124 '-outfmt', '5',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
125 '-db', $blastdb_path,
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
126 );
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
127 my ($blast_in,$blast_out,$blast_err);
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
128 run3 \@blast_cmd, \$blast_in, \$blast_out, \$blast_err;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
129 }
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
130
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
131 my $value;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
132 my @data_tsv;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
133
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
134 foreach(@{$data{file_list}}){
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
135 #push(@fasta_files, $data{gbk}{$_}{fasta_location});
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
136 my $file = $data{gbk}{$_}{fasta_location};
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
137
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
138 my $in = new Bio::SearchIO(
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
139 -format => 'blastxml',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
140 -tempfile => 1,
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
141 -file => "$file.xml",
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
142 );
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
143 while( my $result = $in->next_result ) {
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
144 while( my $hit = $result->next_hit ) {
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
145 while( my $hsp = $hit->next_hsp ) {
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
146 my $Identity = $hsp->percent_identity/100 * $hsp->length('query');
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
147 my $IterationQueryLength = $result->query_length();
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
148 my $HitLength = $hit->length();
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
149 my $dice = (200*$Identity)/($HitLength + $IterationQueryLength);
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
150
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
151 my $c = $result->query_description();#genome_a_header
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
152 my $d = $hit->name();#genome_b_header
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
153 # Skip self-self links
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
154 next if($c eq $d);
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
155
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
156 push (@data_tsv,
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
157 [
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
158 $c,
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
159 $d,
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
160 $hsp->evalue(),
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
161 $dice,
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
162 ]
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
163 );
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
164
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
165 }#close hsp
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
166 }#close hit
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
167 }#close result
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
168 }#close for genomes
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
169
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
170 $data{hit_table} = \@data_tsv;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
171
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
172 use CPT::OutputFiles;
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
173 my $psmout = CPT::OutputFiles->new(
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
174 name => 'cpt_psm_object',
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
175 GGO => $ggo,
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
176 );
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
177 my @val = $psmout->CRR(data => "none", extension => 'psm');
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
178 store \%data,$val[0];
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
179
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
180
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
181
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
182
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
183
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
184
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
185
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
186 =head1 NAME
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
187
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
188 PSM Prep
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
189
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
190 =head1 DESCRIPTION
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
191
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
192 This tool takes in 2 or more GenBank files, blasts, and prepares data structures for use in the companion tool: PSM Plotter. Select as many (multi)-gbk files as you I<might> want to plot. Once this tool is done, you can select any subset of those to plot then.
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
193
b18e8268bf4e Uploaded
cpt
parents:
diff changeset
194 =cut