annotate variant_effect_predictor/Bio/EnsEMBL/Funcgen/RunnableDB/SetupPeaksPipeline.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =pod
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 Bio::EnsEMBL::Hive::RunnableDB::Funcgen::SetupPeaksPipeline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 'SetupPeakPipeline' Does all the setup before the Peaks Pipeline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 Checks for existence of Cell and Feature Type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 (only flags if they do not exist, does not try to create them!!)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 Creates Experiment and Set Entries, Checks Analysis, Group etc...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 This Runnable CANNOT be run multiple times in parallell!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 package Bio::EnsEMBL::Funcgen::RunnableDB::SetupPeaksPipeline;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 use base ('Bio::EnsEMBL::Funcgen::RunnableDB::SWEmbl');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 use Bio::EnsEMBL::DBSQL::DBAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 use Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 use Bio::EnsEMBL::Utils::Exception qw(throw warning stack_trace_dump);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 #use Data::Dumper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 sub fetch_input { # fetch parameters...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $self = shift @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 $self->SUPER::fetch_input();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 my $efgdba = $self->_efgdba();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 #my $dnadba = $self->param('dnadb');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 #Need to change this...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 #my $group = $self->_group_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 my $group = 'efg';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 $efgdba->fetch_group_details($group) || throw "Group $group does not exist in the database. Please create it";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 #Theoretically we should be getting this at the registry...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 #my $csa = $dnadba->get_adaptor('coordsystem');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 my $assembly = $self->_assembly();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 ##Check if the assembly is allowed in the current db we're working on...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 ##In certain DBs this doesn't work: e.g. dev_*_funcgen
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 #if(!grep(/$assembly/, map($_->version, @{ $csa->fetch_all()}))){ throw $assembly." is not a valid assembly"; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 #Checks if the input dir for this experiment_name exists... all input files (including controls must be in this folder)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 my $input_dir = $self->_input_dir();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 if(! -d $input_dir){ throw("Didn't find input directory $input_dir"); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 #Sets up the output dir for this experiment_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 my $output_dir = $self->_output_dir();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 if(! -d $output_dir){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 system("mkdir -p $output_dir") && throw("Couldn't create output directory $output_dir");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 ##Better pass this as a parameter... as sometimes the db does not return the species name...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 #my $species = $dnadba->species;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 my $species = $self->_species();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 my $file_type = $self->_file_type();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 if(($file_type ne 'sam') && ($file_type ne 'bed')){ throw "File type $file_type currently not supported"; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 #infer sam_header from species and assembly...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 if($file_type eq 'sam'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 #Change the directory structure so it will agree with the rest, without the need to do uc()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 my $sam_header = $self->_sam_header();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 if(! -e $sam_header){ throw " File type is sam but could not find sam header $sam_header"; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 #Check if input file exists... do not do preprocessing here... as this can be done in parallel...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 my $input_file = $self->_input_file();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 if(! -e $input_dir."/".$input_file){ throw " Couldn't find input file $input_file in $input_dir"; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 #Check if control file exists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 if(!$self->_skip_control()){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 my $control_file = $self->_control_file();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 if(! -e $input_dir."/".$control_file ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 #Force throw or just warn?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 throw "Couldn't find control file ${input_dir}/${control_file}";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 #$self->_skip_control(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 throw "CCAT requires a control. Cannot skip it" if($self->_analysis()->logic_name =~ /ccat/i);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 sub run { # Check parameters and do appropriate database/file operations...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 my $self = shift @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 #Preprocess control file if needed. this cannot be done in parallel as several sets may require same control file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 if(!$self->_skip_control()){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 #Do not mix this "input" file with the true data input file...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 my $input_file = $self->_input_dir().'/'.$self->_control_file();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 my $output_file = $self->_output_dir().'/'.$self->_control_file();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 #Only do it if it hasn't already been done..
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 if(! -e $output_file){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 $self->_preprocess_file($input_file, $output_file, $self->_file_type()) || throw "Error processing file $input_file";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 # Check experiment, data set, feature set and create as appropriate...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 $self->_check_Experiment($self->_analysis(), $self->_input_file(), $self->_feature_set_name());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 if(!$self->_skip_control()){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 #Add control file as a subset, if needed...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 my $input_set = $self->_efgdba()->get_InputSetAdaptor()->fetch_by_name($self->_set_name());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 if(!$input_set) { throw "Input set was not created"; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my $isubset_name = $self->_control_file();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 if(!$input_set->get_subset_by_name($isubset_name)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 #Change InputSetAdaptor so one subset could be stored each time?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 $input_set->add_new_subset($isubset_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 #this expects a behavior where subsets already stored will just be ignored and no error is thrown
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 $input_set->adaptor->store_InputSubsets($input_set->get_InputSubsets);
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 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 sub write_output { # Create the relevant job
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 my $self = shift @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 #These numbers need to be parameters...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 ## If feature type is H3K36me3 or H3K27me3 use broad peak caller... Maybe all histone data?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 #if($self->_feature_type()->class eq 'Histone'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 #if(($self->_feature_type()->name eq 'H3K36me3') || ($self->_feature_type()->name eq 'H3K27me3')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 # $self->dataflow_output_id( $self->input_id, $self->_broad_peak_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 if($self->_analysis()->logic_name =~ /ccat/i){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 $self->dataflow_output_id( $self->input_id, 4);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 $self->dataflow_output_id( $self->input_id, 3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 1;