annotate variant_effect_predictor/Bio/EnsEMBL/Funcgen/Parsers/redfly.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2011 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <ensembl-dev@ebi.ac.uk>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 package Bio::EnsEMBL::Funcgen::Parsers::redfly;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 use File::Basename;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 # To get files for REDfly, download the following 2 GFF3 files (e.g. via wget):
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 # http://redfly.ccr.buffalo.edu/datadumps/tbfs_dump.gff
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 # http://redfly.ccr.buffalo.edu/datadumps/crm_dump.gff
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 #contact?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 #TFBS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 #2L REDfly regulatory_region 2456365 2456372 . . . ID="Unspecified_dpp:REDFLY:TF000068"; Dbxref="Flybase:FBgn0000490", "PMID:8543160", "REDfly:644, "FlyBase:"; Evidence="footprint/binding assay"; Factor="Unspecified"; Target="dpp";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 #2L REDfly regulatory_region 2456352 2456369 . . . ID="dl_dpp:REDFLY:TF000069"; Dbxref="Flybase:FBgn0000490", "PMID:8458580", "REDfly:645, "FlyBase:FBgn0000463"; Evidence="footprint/binding assay"; Factor="dl"; Target="dpp";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 #CRMs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 #2L REDfly regulatory_region 2455781 2457764 . . . ID="dpp_intron2"; Dbxref="Flybase:FBgn0000490", "PMID:8167377", "REDfly:247; Evidence="reporter construct (in vivo)"; Ontology_term="FBbt:00005304";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 #2L REDfly regulatory_region 2445769 2446581 . . . ID="dpp_dpp813"; Dbxref="Flybase:FBgn0000490", "PMID:7821226", "REDfly:246; Evidence="reporter construct (in vivo)"; Ontology_term="FBbt:00005653","FBbt:00001051";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 use Bio::EnsEMBL::Funcgen::Parsers::BaseExternalParser;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 use Bio::EnsEMBL::DBEntry;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 use Bio::EnsEMBL::Funcgen::ExternalFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 use Bio::EnsEMBL::Utils::Exception qw( throw );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 use Bio::EnsEMBL::Utils::Argument qw( rearrange );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 @ISA = qw(Bio::EnsEMBL::Funcgen::Parsers::BaseExternalParser);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 my $caller = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 my $self = $class->SUPER::new(@_, type => 'REDfly');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 #Set default feature_type and feature_set config
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 #We need to capture version/release/data of external feature sets.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 #This can be nested in the description? Need to add description to feature_set?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 $self->{static_config}{feature_types} =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 'REDfly TFBS' => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 -name => 'REDfly TFBS',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 -class => 'Transcription Factor',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 -description => 'REDfly transciption factor binding site',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 'REDfly CRM' => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 -name => 'REDfly CRM',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 -class => 'Regulatory Motif',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 -description => 'REDfly cis regulatory motif',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 $self->{static_config}{analyses} =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 'REDfly TFBS' => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 -logic_name => 'REDfly TFBS',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 -description => 'REDfly transcription factor binding sites (http://redfly.ccr.buffalo.edu/)',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 -display_label => 'REDfly TFBS',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 -displayable => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 'REDfly CRM' => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 -logic_name => 'REDfly CRM',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 -description => 'REDfly cis regulatory motif (http://redfly.ccr.buffalo.edu/)',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 -display_label => 'REDfly CRM',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 -displayable => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 $self->{static_config}{feature_sets} =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 'REDfly TFBSs' => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 feature_set =>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 -feature_type => 'REDfly TFBS',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 -analysis => 'REDfly TFBS',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 xrefs => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 'REDfly CRMs' => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 feature_set =>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 -feature_type => 'REDfly CRM',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 -analysis => 'REDfly CRM',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 xrefs => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 #Move xref flag here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 $self->{config} = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 'REDfly CRMs' => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 #file => $ENV{'EFG_DATA'}.'/input/REDFLY/redfly_crm.gff',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 gff_attrs => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 'ID' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 'REDfly TFBSs' => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 #file => $ENV{'EFG_DATA'}.'/input/REDFLY/redfly_tfbs.gff',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 gff_attrs => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 'ID' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 'Factor' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 'Target' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 desc_suffix => ' binding site',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 $self->validate_and_store_config([keys %{$self->{static_config}{feature_sets}}]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 $self->set_feature_sets;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 # Parse file and return hashref containing:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 # - arrayref of features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 # - arrayref of factors
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 sub parse_and_load {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 my ($self, $files, $old_assembly, $new_assembly) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 if(scalar(@$files) != 2){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 throw('You must currently define a crm and tfbs file to load redfly features from:\t'.join(' ', @$files));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 #More validation of files here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 $self->{config}{'REDfly CRMs'}{file} = grep(/crm/, @$files);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $self->{config}{'REDfly TFBSs'}{file} = grep(/tfbs/, @$files);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 my %slice_cache;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 my $extf_adaptor = $self->db->get_ExternalFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 my $dbentry_adaptor = $self->db->get_DBEntryAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 my $ftype_adaptor = $self->db->get_FeatureTypeAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 # this object is only used for projection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 my $dummy_analysis = new Bio::EnsEMBL::Analysis(-logic_name => 'REDflyProjection');#do we need this?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 my $species = $self->db->species;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 if(! $species){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 throw('Must define a species to define the external_db');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 #Just to make sure we hav homo_sapiens and not Homo Sapiens
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 ($species = lc($species)) =~ s/ /_/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 foreach my $import_set(@{$self->import_sets}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 $self->log_header("Parsing $import_set data");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 my %factor_cache; # name -> factor_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 my %target_cache;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 my $config = $self->{'config'}{$import_set};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 my $fset = $self->{static_config}{feature_sets}{$import_set}{feature_set};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 my %gff_attrs = %{$config->{'gff_attrs'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 # Parse motifs.txt file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 my $file = $config->{'file'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 my $skipped = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 my $factor_cnt = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 my $factor_xref_cnt = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 my $feature_cnt = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my $feature_target_cnt = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 open (FILE, "<$file") || die("Can't open $file\n$!\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 <FILE>; # skip header
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 LINE: while (my $line = <FILE>) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 next if ($line =~ /^\s*\#/o || $line =~ /^\s*$/o);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 chomp $line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 my %attr_cache;#Can we move this outside the loop and rely on it being reset each time?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 #GFF3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 #Is this format valid, missing " after REDfly xref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 #2L REDfly regulatory_region 2456365 2456372 . . . ID="Unspecified_dpp:REDFLY:TF000068"; Dbxref="Flybase:FBgn0000490", "PMID:8543160", "REDfly:644, "FlyBase:"; Evidence="footprint/binding assay"; Factor="Unspecified"; Target="dpp";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 #seq_name, source, feature, start, end, score, strand, frame, [attrs]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 my ($chromosome, undef, $feature, $start, $end, undef, undef, undef, $attrs) = split /\t/o, $line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 my @attrs = split/\;\s+/o, $attrs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 #UCSC coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $start ++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 $end ++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 foreach my $gff_attr(keys %gff_attrs){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 if(($attr_cache{$gff_attr}) = grep {/^${gff_attr}\=/} @attrs){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 $attr_cache{$gff_attr} =~ s/(^${gff_attr}\=\")(.*)(\")/$2/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 #warn "attr cache is $attr_cache{$gff_attr} ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 warn "Skipping import, unable to find mandatory $gff_attr attribute in:\t$line";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 next LINE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 #For TFBS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 #Factor = coding gene name display_label
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 #Target = Target gene?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 #Ignore other xrefs for name, just put ID in feature as display_label
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 #These are mixed up! and where not getting any coding xrefs!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 #For CRM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 #Can we split the ID and have Reguatory XREF?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 #e.g. ID="dpp_dpp813"; => dpp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 #This can be moved to the BaseExternalParser
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 if(! exists $slice_cache{$chromosome}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 if($old_assembly){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 $slice_cache{$chromosome} = $self->slice_adaptor->fetch_by_region('chromosome',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 $chromosome,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 $old_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 }else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 $slice_cache{$chromosome} = $self->slice_adaptor->fetch_by_region('chromosome', $chromosome);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 if(! defined $slice_cache{$chromosome}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 warn "Can't get slice $chromosome for motif $attr_cache{'ID'};\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 $skipped++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 #get feature_type first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 #we are not maintaining this link in the DB!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 #Do we need another xref for this or a different table?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 my $feature_type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 #TFBSs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 if(exists $attr_cache{'Factor'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 if(! exists $factor_cache{$attr_cache{'Factor'}}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 $factor_cache{$attr_cache{'Factor'}} = $ftype_adaptor->fetch_by_name($attr_cache{'Factor'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 if(! defined $factor_cache{$attr_cache{'Factor'}}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 #Would need to add CODING DBEntry here!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 #Will this work on a scalar ref to a hash?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 my $desc = (exists $config->{'desc_suffix'}) ? $attr_cache{'Factor'}.$config->{'desc_suffix'} : undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 ($factor_cache{$attr_cache{'Factor'}}) = @{$ftype_adaptor->store(Bio::EnsEMBL::Funcgen::FeatureType->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 -name => $attr_cache{'Factor'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 -class => $fset->feature_type->class,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 -description => $desc,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 ))};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $feature_type = $factor_cache{$attr_cache{'Factor'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $factor_cnt ++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 my $stable_id = $self->get_core_stable_id_by_display_name($self->db->dnadb, $attr_cache{'Factor'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 #Handle release/version in xref version as stable_id version?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 if(! defined $stable_id){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 warn "Could not generate CODING xref for feature_type:\t". $attr_cache{'Factor'}."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 }else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 #warn "got $stable_id for ".$attr_cache{'Factor'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 my $dbentry = Bio::EnsEMBL::DBEntry->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 -dbname => $species.'_core_Gene',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 #-release => $self->db->dnadb->dbc->dbname,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 -status => 'KNOWNXREF',#This is for the external DB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 #-display_label_linkable => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 -#db_display_name => $self->db->dnadb->dbc->dbname,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 -db_display_name => 'EnsemblGene',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 -type => 'MISC',#Is for the external_db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 -primary_id => $stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 -display_id => $attr_cache{'Factor'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 -info_type => 'MISC',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 -into_text => 'GENE',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 -linkage_annotation => 'REDfly Coding'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 -analysis => $fset->analysis,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 #-description => 'cisRED motif gene xref',#This is now generic and no longer resitricted to REDfly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 #could have version here if we use the correct dnadb to build the cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 $dbentry_adaptor->store($dbentry, $factor_cache{$attr_cache{'Factor'}}->dbID, 'FeatureType', 1);#1 is ignore release flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 $factor_xref_cnt ++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 #CRMs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $feature_type = $fset->feature_type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 #Now build actual feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 $feature = Bio::EnsEMBL::Funcgen::ExternalFeature->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 -display_label => $attr_cache{'ID'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 -start => $start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 -end => $end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 -strand => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 -feature_type => $feature_type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 -feature_set => $fset,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 -slice => $slice_cache{$chromosome},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 # project if necessary
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 if ($new_assembly) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 $feature = $self->project_feature($feature, $new_assembly);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 if(! defined $feature){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 $skipped ++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 ($feature) = @{$extf_adaptor->store($feature)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 $feature_cnt++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 my $target = (exists $attr_cache{'Target'}) ? $attr_cache{'Target'} : (split/_/, $attr_cache{'ID'})[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 my $stable_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 if($target ne 'Unspecified'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 $stable_id = $self->get_core_stable_id_by_display_name($self->db->dnadb, $target);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 if(! defined $stable_id){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 warn "Could not generate TARGET xref for feature:\t". $attr_cache{'ID'}."\n" if $target ne 'Unspecified';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 #Handle release/version in xref version as stable_id version?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 my $dbentry = Bio::EnsEMBL::DBEntry->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 -dbname => $species.'_core_Gene',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 #-release => $self->db->dnadb->dbc->dbname,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 -status => 'KNOWNXREF',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 #-display_label_linkable => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 -#db_display_name => $self->db->dnadb->dbc->dbname,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 -db_display_name => 'EnsemblGene',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 -type => 'MISC',#
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 -primary_id => $stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 -display_id => $target,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 -info_type => 'MISC',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 -info_text => 'GENE',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 -linkage_annotation => $fset->feature_type->name.' Target',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 -analysis => $fset->analysis,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 #could have version here if we use the correct dnadb to build the cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 $dbentry_adaptor->store($dbentry, $feature->dbID, 'ExternalFeature', 1);#1 is ignore release flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 $feature_target_cnt ++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 close FILE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 $self->log("Loaded ".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 $self->log("$factor_cnt feature types");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $self->log("$factor_xref_cnt feature type coding xrefs");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 $self->log("$feature_cnt features");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 $self->log("$feature_target_cnt feature target xrefs");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 $self->log("Skipped $skipped features");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 1;