annotate bin/parse @ 6:d248caf924d3 draft

Uploaded
author morinlab
date Wed, 30 Nov 2016 13:36:59 -0500
parents b77ab858eac1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
1 #!/bin/env perl
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
2
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
3 =pod
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
4
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
5 =head1 NAME
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
6
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
7 parse - parse Ryan's MAF and CNV files and generate a summary table of all genes and their mutations and CNV status
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
8
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
9 =head1 SYNOPSIS
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
10
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
11 # automatically load etc/parse.conf
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
12 bin/parse
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
13
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
14 # if config file is elsewhere
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
15 bin/parse -conf elsewhere/my.conf
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
16
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
17 =head1 DESCRIPTION
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
18
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
19 See etc/parse.conf for all settings.
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
20
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
21 =head1 OPTIONS
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
22
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
23 =cut
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
24
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
25 use strict;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
26 use warnings FATAL=>"all";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
27
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
28 use Carp;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
29 use Config::General;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
30 use Cwd qw(getcwd abs_path);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
31 use Data::Dumper;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
32 use File::Basename;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
33 use FindBin;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
34 use Getopt::Long;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
35 use Math::Round qw(round nearest);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
36 use Math::VecStat qw(sum min max average);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
37 use Pod::Usage;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
38 use Time::HiRes qw(gettimeofday tv_interval);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
39 use Statistics::Basic qw(median);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
40 use Storable;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
41 use lib "$FindBin::RealBin";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
42 use lib "$FindBin::RealBin/../lib";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
43 use lib "$FindBin::RealBin/lib";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
44
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
45 our (%OPT,%CONF,$conf);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
46 our @COMMAND_LINE = ("file=s",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
47 "configfile=s",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
48 "help",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
49 "cdump",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
50 "man",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
51 "debug");
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
52 our $VERSION = 0.02;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
53
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
54 # common and custom module imports below
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
55 #use Regexp::Common;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
56 #use IO::File;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
57 #use List::Util;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
58 #use List::MoreUtils;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
59 use Set::IntSpan;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
60 #use Statistics::Descriptive;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
61
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
62 # read and parse configuration file
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
63 parse_config();
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
64
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
65 sub validateconfiguration {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
66 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
67
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
68 #map2interval(5,$CONF{cnv}{log2});
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
69 #exit;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
70
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
71 ################################################################
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
72 # get files
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
73 my $sv = read_file($CONF{files}{sv} ,"sv" );
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
74 my $genes = read_file($CONF{files}{mart},"genes");
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
75 my $cnv = read_file($CONF{files}{cnv} ,"cnv" );
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
76 my $cnvlg = read_file($CONF{files}{cnvlg},"cnvlg");
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
77 my %affected_genes;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
78 open(GENES, $CONF{files}{genes}) or die "#! $CONF{files}{genes}\n";
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
79 while(<GENES>){
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
80 chomp;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
81 $affected_genes{$_}++;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
82 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
83
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
84
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
85
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
86 ################################################################
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
87 # traverse all genes from biomart and determine number
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
88 # of SV and CNV events across samples
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
89 for my $chr (keys %$genes) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
90 next if $CONF{filter}{chr} && $chr ne $CONF{filter}{chr};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
91 printdebug("processing",$chr);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
92 for my $gene (@{$genes->{$chr}}) {
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
93 my $id = $gene->{id};
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
94 my $name = $gene->{name};
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
95 #print "GENE: $name, ID: $id\n";
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
96 # filter out by presence and number of SV events
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
97
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
98 # number of samples that have SV event
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
99 my @samples_sv = keys %{$sv->{$id}};
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
100 if(defined $affected_genes{$name}){
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
101 #override normal criteria for this gene
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
102
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
103 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
104 else{
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
105 next if $CONF{filter}{sv} && ! $sv->{$id};
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
106 next if $CONF{filter}{sv_num} && @samples_sv < $CONF{filter}{sv_num};
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
107 }
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
108 $gene->{affected} = 1;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
109
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
110 # register SV events
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
111 my $pos;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
112 for my $sample (@samples_sv) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
113 for my $sv (sort {$b->{weight} <=> $a->{weight}} @{$sv->{$id}{$sample}}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
114 $gene->{sv}{ $sv->{type} }++;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
115 $gene->{sv}{ "*" }++;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
116 $pos->{ $sv->{aa} }++; # register the protein position of the SV
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
117 next if $CONF{sv}{top_damage_only};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
118 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
119 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
120 # top SV event
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
121 if($gene->{sv}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
122 my ($sv_top) = sort {$gene->{sv}{$b} <=> $gene->{sv}{$a}} grep($_ ne "*",keys %{$gene->{sv}});
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
123 $gene->{sv_top}{$sv_top} = $gene->{sv}{$sv_top};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
124 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
125 for my $aa (sort {$pos->{$b} <=> $pos->{$a}} keys %$pos) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
126 #next unless $pos->{$aa} > 1;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
127 my $n = $pos->{$aa};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
128 $gene->{svaa_top}{$aa} = $n if ! defined $gene->{svaa_top};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
129 $gene->{svaa}{"*"} += $n;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
130 $gene->{svaa}{$aa} = $n;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
131 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
132 # register CNV events
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
133 my @samples_cnv = keys %$cnv;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
134 # lookup any CNV events -- this can take a bit of time
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
135 # we can bin the CNV hash later if needed
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
136 for my $sample (@samples_cnv) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
137 my $chr = $gene->{chr};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
138 next unless $cnv->{$sample}{$chr};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
139 for my $cnv (@{$cnv->{$sample}{$chr}}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
140 my $int = $cnv->{set}->intersect($gene->{set})->cardinality;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
141 next unless $int;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
142 push @{$gene->{cnv}{$cnv->{category}}{$sample}}, $cnv->{avg};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
143 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
144 }
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
145 for my $sample (keys %$cnvlg) {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
146 my $chr = $gene->{chr};
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
147 next unless $cnvlg->{$chr};
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
148 for my $cnv (@{$cnvlg->{$chr}}) {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
149 my $int = $cnv->{set}->intersect($gene->{set})->cardinality;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
150 next unless $int;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
151 $gene->{cnvlg}{$cnv->{idx}} = $cnv->{type};
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
152 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
153 }
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
154 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
155 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
156
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
157 ################################################################
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
158 # report
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
159 my $i = 0;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
160 for my $chr (1..22,"X","Y") {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
161 next unless $genes->{$chr};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
162 for my $gene (sort {$a->{start} <=> $b->{start}} @{$genes->{$chr}}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
163 next unless $gene->{affected};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
164 my @report = ($i++,@{$gene}{qw(id name chr start end size)});
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
165 if($gene->{sv}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
166 push @report, sprintf("sv_top:%s:%d",keys %{$gene->{sv_top}},values %{$gene->{sv_top}});
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
167 for my $type (sort keys %{$gene->{sv}}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
168 push @report, sprintf("sv:%s:%d",$type,$gene->{sv}{$type});
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
169 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
170 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
171 if($gene->{svaa}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
172 push @report, sprintf("svaa_top:%s:%d",keys %{$gene->{svaa_top}},values %{$gene->{svaa_top}});
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
173 for my $aa (sort {$gene->{svaa}{$b} <=> $gene->{svaa}{$a}} keys %{$gene->{svaa}}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
174 push @report, sprintf("svaa:%s:%d",$aa,$gene->{svaa}{$aa});
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
175 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
176 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
177 if($gene->{cnv}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
178 my $type_count;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
179 my $delins_count;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
180 my $values_by_type;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
181 for my $type (sort keys %{$gene->{cnv}}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
182 my @sample_avg;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
183 for my $sample (keys %{$gene->{cnv}{$type}}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
184 # number of samples with this kind of CNV event
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
185 $type_count->{$type}++;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
186 my @values = @{$gene->{cnv}{$type}{$sample}};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
187 push @sample_avg, average(@values);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
188 push @{$values_by_type->{$type}}, @values;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
189 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
190 push @report, sprintf("cnv:%s:%d:%f:%f:%f:%f",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
191 $type,
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
192 int(@sample_avg),
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
193 scalar(min(@sample_avg)),
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
194 average(@sample_avg),
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
195 median(@sample_avg)->query,
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
196 scalar(max(@sample_avg)));
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
197 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
198 my ($top_type) = sort {$type_count->{$b} <=> $type_count->{$a}} keys %$type_count;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
199 push @report, sprintf("cnv_top:%s:%d:%f:%f:%f:%f",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
200 $top_type,
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
201 $type_count->{$top_type},
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
202 scalar(min(@{$values_by_type->{$top_type}})),
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
203 average(@{$values_by_type->{$top_type}}),
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
204 median(@{$values_by_type->{$top_type}})->query,
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
205 scalar(max(@{$values_by_type->{$top_type}})));
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
206 }
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
207 if($gene->{cnvlg}) {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
208 for my $cnv_idx (sort {$a <=> $b} keys %{$gene->{cnvlg}}) {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
209 push @report, sprintf("cnvlg:%d:%s",
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
210 $cnv_idx,
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
211 $gene->{cnvlg}{$cnv_idx});
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
212 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
213 }
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
214 printinfo(@report);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
215 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
216 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
217
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
218 exit;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
219
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
220 ################################################################
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
221
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
222 sub map2value {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
223 my ($field_name,$x) = @_;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
224 if($CONF{map}{$field_name}) {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
225 my ($var,$fn) = split(":",$CONF{map}{$field_name});
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
226 $fn =~ s/x/$x/g;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
227 my $value = eval $fn;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
228 die "Could not evaluate remapping [$fn]" if $@;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
229 return ($var,$value);
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
230 } else {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
231 return ($field_name,$x);
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
232 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
233 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
234
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
235 sub str2leaf {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
236 my $str = shift;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
237 my $delim = "}{";
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
238 $str =~ s/\//$delim/g;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
239 $str = sprintf("\$CONF{$str}");
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
240 my $leaf = eval $str;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
241 if($@) {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
242 die "Could not parse [$str] as a data structure.";
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
243 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
244 return $leaf;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
245 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
246
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
247 sub read_file {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
248 my ($file,$type) = @_;
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
249
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
250 open(F,$file) || die "Could not open file [$file] for reading";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
251 my $data;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
252
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
253 my @fields = grep(/\d/,keys %{$CONF{fields}{$type}});
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
254 my @keys = split(",",$CONF{fields}{$type}{key});
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
255
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
256 my $i = 0;
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
257 while(<F>) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
258 chomp;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
259 next if /^\#/;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
260 my @tok = split "\t";
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
261 my $entry = {class=>$type,idx=>$i};
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
262 for my $col (@fields) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
263 my ($field_name,$field_transform) = split(":",$CONF{fields}{$type}{$col});
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
264 my ($new_field_name,$value) = map2value($field_name,$tok[$col]);
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
265 if($new_field_name ne $field_name) {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
266 $entry->{$field_name} = $tok[$col];
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
267 $field_name = $new_field_name;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
268 }
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
269 if($field_transform) {
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
270 if($field_transform eq "lc") {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
271 $value = lc $value;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
272 } elsif ($field_transform =~ /map\((.+),(.+)\)/) {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
273 $entry->{$field_name} = $value;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
274 $field_name = $1;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
275 $value = map2interval($value,str2leaf($2));
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
276 }
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
277 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
278 $entry->{ $field_name } = $value;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
279 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
280 # skip mutation types that are not important
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
281 next if $CONF{sv}{filter} && $type eq "sv" && exists $entry->{type} && ! $CONF{sv}{types}{$entry->{type}};
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
282 next if $CONF{cnv}{filter} && $type eq "cnv" && exists $entry->{category} && ! $CONF{cnv}{types}{$entry->{category}};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
283 if($type eq "sv") {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
284 $entry->{weight} = $CONF{sv}{types}{$entry->{type}};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
285 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
286 $entry->{chr} = "X" if $entry->{chr} eq 23;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
287 $entry->{chr} = "Y" if $entry->{chr} eq 24;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
288 next unless grep($entry->{chr} eq $_, (1..22,"X","Y"));
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
289 $entry->{set} = span(@{$entry}{qw(start end)}) if $entry->{start};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
290 $entry->{size} = $entry->{set}->cardinality;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
291 #printdumper($entry);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
292 $i++;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
293 if(@keys == 1) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
294 push @{$data->{$entry->{$keys[0]}}}, $entry;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
295 } elsif (@keys == 2) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
296 push @{$data->{$entry->{$keys[0]}}{$entry->{$keys[1]}}}, $entry;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
297 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
298 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
299 printdebug("got",$i,$type);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
300 return $data;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
301 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
302
6
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
303 sub map2interval {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
304 my ($x,$conf) = @_;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
305 for my $int (keys %$conf) {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
306 my $cat = $conf->{$int};
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
307 return $cat if in_interval($x,$int);
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
308 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
309 printdumper($conf);
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
310 die "Could not map $x into any of the intervals seen";
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
311 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
312
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
313 sub in_interval {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
314 my ($x,$int) = @_;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
315 my $open_L = "\\(";
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
316 my $closed_L = "\\[";
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
317 my $open_R = "\\)";
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
318 my $closed_R = "\\]";
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
319 my $num = "[0-9]*"; #[0-9]+(?:.[0-9]+)?";
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
320 my $rx = "($open_L|$closed_L)($num),($num)($open_R|$closed_R)";
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
321 my $bool = 1;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
322 if($int =~ /$rx/) {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
323 if($2 ne "") {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
324 $bool &&= $1 eq "(" ? $x > $2 : $x >= $2;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
325 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
326 if($3 ne "") {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
327 $bool &&= $4 eq ")" ? $x < $3 : $x <= $3;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
328 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
329 } else {
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
330 $bool = $x == $int;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
331 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
332 return $bool;
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
333 }
d248caf924d3 Uploaded
morinlab
parents: 0
diff changeset
334
0
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
335 sub list2hash {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
336 my %h;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
337 map {$h{$_}=1} @_;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
338 return %h;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
339 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
340
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
341 sub span {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
342 my ($x,$y) = @_;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
343 if($x==$y) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
344 return Set::IntSpan->new($x);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
345 } else {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
346 return Set::IntSpan->new("$x-$y");
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
347 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
348 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
349
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
350 sub get_handle {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
351 my $h;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
352 if(my $file = $CONF{file}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
353 die "No such file [$file]" unless -e $file;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
354 open(FILE,$file);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
355 $h = \*FILE;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
356 } else {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
357 $h = \*STDIN;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
358 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
359 return $h;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
360 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
361
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
362 # HOUSEKEEPING ###############################################################
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
363
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
364 sub dump_config {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
365 printdumper(\%OPT,\%CONF);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
366 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
367
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
368 sub parse_config {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
369 my $dump_debug_level = 3;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
370 GetOptions(\%OPT,@COMMAND_LINE);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
371 pod2usage() if $OPT{help};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
372 pod2usage(-verbose=>2) if $OPT{man};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
373 loadconfiguration($OPT{configfile});
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
374 populateconfiguration(); # copy command line options to config hash
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
375 validateconfiguration();
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
376 if ($CONF{cdump}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
377 $Data::Dumper::Indent = 2;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
378 $Data::Dumper::Quotekeys = 0;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
379 $Data::Dumper::Terse = 0;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
380 $Data::Dumper::Sortkeys = 1;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
381 $Data::Dumper::Varname = "OPT";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
382 printdumper(\%OPT);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
383 $Data::Dumper::Varname = "CONF";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
384 printdumper(\%CONF);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
385 exit;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
386 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
387 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
388
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
389 sub populateconfiguration {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
390 for my $var (keys %OPT) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
391 $CONF{$var} = $OPT{$var};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
392 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
393 repopulateconfiguration(\%CONF);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
394 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
395
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
396 sub repopulateconfiguration {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
397 my ($node,$parent_node_name) = shift;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
398 return unless ref($node) eq "HASH";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
399 for my $key (keys %$node) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
400 my $value = $node->{$key};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
401 if (ref($value) eq "HASH") {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
402 repopulateconfiguration($value,$key);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
403 } elsif (ref($value) eq "ARRAY") {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
404 for my $item (@$value) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
405 repopulateconfiguration($item,$key);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
406 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
407 } elsif (defined $value) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
408 my $new_value = parse_field($value,$key,$parent_node_name,$node);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
409 $node->{$key} = $new_value;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
410 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
411 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
412 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
413
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
414 sub parse_field {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
415 my ($str,$key,$parent_node_name,$node) = @_;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
416 # replace configuration field
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
417 # conf(LEAF,LEAF,...)
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
418 while ( $str =~ /(conf\(\s*(.+?)\s*\))/g ) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
419 my ($template,$leaf) = ($1,$2);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
420 if (defined $template && defined $leaf) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
421 my @leaf = split(/\s*,\s*/,$leaf);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
422 my $new_template;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
423 if (@leaf == 2 && $leaf[0] eq ".") {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
424 $new_template = $node->{$leaf[1]};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
425 } else {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
426 $new_template = fetch_conf(@leaf);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
427 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
428 $str =~ s/\Q$template\E/$new_template/g;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
429 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
430 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
431 if ($str =~ /\s*eval\s*\(\s*(.+)\s*\)/) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
432 my $fn = $1;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
433 $str = eval $fn;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
434 if ($@) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
435 die "could not parse configuration parameter [$@]";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
436 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
437 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
438 return $str;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
439 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
440
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
441 sub fetch_configuration {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
442 my @config_path = @_;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
443 my $node = \%CONF;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
444 if(! @config_path) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
445 return \%CONF;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
446 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
447 for my $path_element (@config_path) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
448 if (! exists $node->{$path_element}) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
449 return undef;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
450 } else {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
451 $node = $node->{$path_element};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
452 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
453 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
454 return $node;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
455 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
456
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
457 sub fetch_conf {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
458 return fetch_configuration(@_);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
459 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
460
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
461 sub loadconfiguration {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
462 my $file = shift;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
463 if (defined $file) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
464 if (-e $file && -r _) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
465 # provided configuration file exists and can be read
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
466 $file = abs_path($file);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
467 } else {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
468 confess "The configuration file [$file] passed with -configfile does not exist or cannot be read.";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
469 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
470 } else {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
471 # otherwise, try to automatically find a configuration file
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
472 my ($scriptname,$path,$suffix) = fileparse($0);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
473 my $cwd = getcwd();
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
474 my $bindir = $FindBin::RealBin;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
475 my $userdir = $ENV{HOME};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
476 my @candidate_files = (
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
477 "$cwd/$scriptname.conf",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
478 "$cwd/etc/$scriptname.conf",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
479 "$cwd/../etc/$scriptname.conf",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
480 "$bindir/$scriptname.conf",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
481 "$bindir/etc/$scriptname.conf",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
482 "$bindir/../etc/$scriptname.conf",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
483 "$userdir/.$scriptname.conf",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
484 );
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
485 my @additional_files = ();
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
486 for my $candidate_file (@additional_files,@candidate_files) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
487 #printinfo("configsearch",$candidate_file);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
488 if (-e $candidate_file && -r _) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
489 $file = $candidate_file;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
490 #printinfo("configfound",$candidate_file);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
491 last;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
492 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
493 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
494 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
495 if (defined $file) {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
496 $OPT{configfile} = $file;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
497 $conf = new Config::General(
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
498 -ConfigFile=>$file,
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
499 -IncludeRelative=>1,
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
500 -IncludeAgain=>1,
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
501 -ExtendedAccess=>1,
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
502 -AllowMultiOptions=>"yes",
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
503 #-LowerCaseNames=>1,
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
504 -AutoTrue=>1
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
505 );
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
506 %CONF = $conf->getall;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
507 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
508 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
509
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
510 sub printdebug {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
511 printinfo("debug",@_) if defined $CONF{debug};
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
512 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
513
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
514 sub printinfo {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
515 print join(" ",map { defined $_ ? $_ : "_undef_" } @_),"\n";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
516 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
517
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
518 sub printfinfo {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
519 my ($fmt,@args) = @_;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
520 @args = map { defined $_ ? $_ : "_undef_" } @args;
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
521 printf("$fmt\n",@args);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
522 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
523
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
524 sub printerr {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
525 print STDERR join(" ",map { defined $_ ? $_ : "_undef_" } @_),"\n";
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
526 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
527
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
528 sub printdumper {
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
529 print Dumper(@_);
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
530 }
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
531
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
532 =pod
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
533
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
534 =head1 HISTORY
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
535
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
536 =over
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
537
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
538 =item * 30 Nov 2015
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
539
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
540 Started.
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
541
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
542 =back
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
543
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
544 =head1 AUTHOR
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
545
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
546 Martin Krzywinski
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
547
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
548 =head1 CONTACT
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
549
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
550 Martin Krzywinski
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
551 Genome Sciences Center
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
552 BC Cancer Research Center
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
553 100-570 W 7th Ave
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
554 Vancouver BC V5Z 4S6
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
555
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
556 mkweb.bcgsc.ca
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
557 martink@bcgsc.ca
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
558
b77ab858eac1 Uploaded
morinlab
parents:
diff changeset
559 =cut