diff --git a/modules/EnsEMBL/Web/Component/Transcript/ProteinVariations.pm b/modules/EnsEMBL/Web/Component/Transcript/ProteinVariations.pm index d6c146a108..316259f28b 100644 --- a/modules/EnsEMBL/Web/Component/Transcript/ProteinVariations.pm +++ b/modules/EnsEMBL/Web/Component/Transcript/ProteinVariations.pm @@ -103,8 +103,8 @@ sub table_content { my $polys = classify_sift_polyphen($tva->polyphen_prediction, $tva->polyphen_score); my $cadds = classify_score_prediction($tva->cadd_prediction, $tva->cadd_score); my $revels = classify_score_prediction($tva->dbnsfp_revel_prediction, $tva->dbnsfp_revel_score); - my $meta_lrs = classify_score_prediction($tva->dbnsfp_meta_lr_prediction, $tva->dbnsfp_meta_lr_score); - my $mutation_assessors = classify_score_prediction($tva->dbnsfp_mutation_assessor_prediction, $tva->dbnsfp_mutation_assessor_score); + my $alphamissenses = classify_score_prediction($tva->dbnsfp_alphamissense_prediction, $tva->dbnsfp_alphamissense_score); + my $esm1bs = classify_score_prediction($tva->dbnsfp_esm1b_prediction, $tva->dbnsfp_esm1b_score); my $row = { vf => $var->{'vf'}->dbID, @@ -131,12 +131,12 @@ sub table_content { revel_sort => $revels->[0], revel_class => $revels->[1], revel_value => $revels->[2], - meta_lr_sort => $meta_lrs->[0], - meta_lr_class => $meta_lrs->[1], - meta_lr_value => $meta_lrs->[2], - mutation_assessor_sort => $mutation_assessors->[0], - mutation_assessor_class => $mutation_assessors->[1], - mutation_assessor_value => $mutation_assessors->[2], + alphamissense_sort => $alphamissenses->[0], + alphamissense_class => $alphamissenses->[1], + alphamissense_value => $alphamissenses->[2], + esm1b_sort => $esm1bs->[0], + esm1b_class => $esm1bs->[1], + esm1b_value => $esm1bs->[2], }; $callback->add_row($row); last ROWS if $callback->stand_down; @@ -159,7 +159,7 @@ sub make_table { my @exclude; push @exclude,'sift_sort','sift_class','sift_value' unless $sd->{'SIFT'}; unless($hub->species eq 'Homo_sapiens') { - push @exclude,'polyphen_sort','polyphen_class','polyphen_value', 'cadd_sort', 'cadd_class', 'cadd_value', 'revel_sort', 'revel_class', 'revel_value', 'meta_lr_sort', 'meta_lr_class', 'meta_lr_value', 'mutation_assessor_sort', 'mutation_assessor_class', 'mutation_assessor_value'; + push @exclude,'polyphen_sort','polyphen_class','polyphen_value', 'cadd_sort', 'cadd_class', 'cadd_value', 'revel_sort', 'revel_class', 'revel_value', 'alphamissense_sort', 'alphamissense_class', 'alphamissense_value', 'esm1b_sort', 'esm1b_class', 'esm1b_value'; } my @columns = ({ @@ -285,27 +285,27 @@ sub make_table { filter_fixed => 1, filter_blank_button => 1, },{ - _key => 'meta_lr_sort', _type => 'numeric no_filter unshowable', - sort_for => 'meta_lr_value', + _key => 'alphamissense_sort', _type => 'numeric no_filter unshowable', + sort_for => 'alphamissense_value', },{ - _key => 'meta_lr_class', _type => 'iconic no_filter unshowable', + _key => 'alphamissense_class', _type => 'iconic no_filter unshowable', },{ - _key => 'meta_lr_value', _type => 'numeric', - label => "MetaLR", - helptip => $glossary->{'MetaLR'}, + _key => 'alphamissense_value', _type => 'numeric', + label => "AlphaMissense", + helptip => $glossary->{'AlphaMissense'}, filter_range => [0,1], filter_fixed => 1, filter_blank_button => 1, },{ - _key => 'mutation_assessor_sort', _type => 'numeric no_filter unshowable', - sort_for => 'mutation_assessor_value', + _key => 'esm1b_sort', _type => 'numeric no_filter unshowable', + sort_for => 'esm1b_value', },{ - _key => 'mutation_assessor_class', _type => 'iconic no_filter unshowable', + _key => 'esm1b_class', _type => 'iconic no_filter unshowable', },{ - _key => 'mutation_assessor_value', _type => 'numeric', - label => "Mutation Assessor", - helptip => $glossary->{'MutationAssessor'}, - filter_range => [0,1], + _key => 'esm1b_value', _type => 'numeric', + label => "ESM1b", + helptip => $glossary->{'ESM1b'}, + filter_range => [-30,10], filter_fixed => 1, filter_blank_button => 1, } @@ -384,7 +384,7 @@ sub sift_poly_classes { my $sp_classes = predictions_classes; - foreach my $column_name (qw(sift polyphen cadd revel meta_lr mutation_assessor)) { + foreach my $column_name (qw(sift polyphen cadd revel alphamissense esm1b)) { my $value_column = $table->column("${column_name}_value"); my $class_column = $table->column("${column_name}_class"); next unless $value_column and $class_column; @@ -397,12 +397,12 @@ sub sift_poly_classes { # TODO: make decorators accessible to filters. Complexity is that # many decorators (including these) are multi-column. my $lozenge = qq(
%s
); - my $left = { sift => 'bad', polyphen => 'good', cadd => 'good', revel => 'good', meta_lr => 'good', mutation_assessor => 'good'}->{$column_name}; - my $right = { sift => 'good', polyphen => 'bad', cadd => 'bad', revel => 'bad', meta_lr => 'bad', 'mutation_assessor' => 'bad'}->{$column_name}; + my $left = { sift => 'bad', polyphen => 'good', cadd => 'good', revel => 'good', alphamissense => 'good', esm1b => 'good'}->{$column_name}; + my $right = { sift => 'good', polyphen => 'bad', cadd => 'bad', revel => 'bad', alphamissense => 'bad', esm1b => 'bad'}->{$column_name}; $value_column->filter_endpoint_markup(0,sprintf($lozenge,$left,"0")); $value_column->filter_endpoint_markup(1,sprintf($lozenge,$right,"1")); my $slider_class = - { sift => 'redgreen', polyphen => 'greenred', cadd => 'greenred', revel => 'greenred', meta_lr => 'greenred', mutation_assessor => 'greenred' }->{$column_name}; + { sift => 'redgreen', polyphen => 'greenred', cadd => 'greenred', revel => 'greenred', alphamissense => 'greenred', esm1b => 'greenred' }->{$column_name}; $value_column->filter_slider_class("newtable_slider_$slider_class"); } diff --git a/modules/EnsEMBL/Web/Component/Variation/Mappings.pm b/modules/EnsEMBL/Web/Component/Variation/Mappings.pm index ed871d6590..c1b1c357dd 100644 --- a/modules/EnsEMBL/Web/Component/Variation/Mappings.pm +++ b/modules/EnsEMBL/Web/Component/Variation/Mappings.pm @@ -235,8 +235,8 @@ sub content { my $cadd = $self->render_score_prediction($tva->cadd_prediction, $tva->cadd_score); my $dbnsfp_revel = $self->render_score_prediction($tva->dbnsfp_revel_prediction, $tva->dbnsfp_revel_score); - my $dbnsfp_meta_lr = $self->render_score_prediction($tva->dbnsfp_meta_lr_prediction, $tva->dbnsfp_meta_lr_score); - my $dbnsfp_mutation_assessor = $self->render_score_prediction($tva->dbnsfp_mutation_assessor_prediction, $tva->dbnsfp_mutation_assessor_score); + my $dbnsfp_alphamissense = $self->render_score_prediction($tva->dbnsfp_alphamissense_prediction, $tva->dbnsfp_alphamissense_score); + my $dbnsfp_esm1b = $self->render_score_prediction($tva->dbnsfp_esm1b_prediction, $tva->dbnsfp_esm1b_score); # Allele @@ -301,15 +301,15 @@ sub content { polyphen => $poly, cadd => $cadd, dbnsfp_revel => $dbnsfp_revel, - dbnsfp_meta_lr => $dbnsfp_meta_lr, - dbnsfp_mutation_assessor => $dbnsfp_mutation_assessor, + dbnsfp_alphamissense => $dbnsfp_alphamissense, + dbnsfp_esm1b => $dbnsfp_esm1b, detail => $self->ajax_add($self->ajax_url(undef, { t => $trans_name, vf => $vf, allele => $a, update_panel => 1 }).";single_transcript=variation_feature_variation=normal", "${trans_name}_${vf}_${a}"), }; push(@rows, $row); # Column flags - foreach my $col ('sift', 'polyphen', 'cadd', 'dbnsfp_revel', 'dbnsfp_meta_lr', 'dbnsfp_mutation_assessor') { + foreach my $col ('sift', 'polyphen', 'cadd', 'dbnsfp_revel', 'dbnsfp_alphamissense', 'dbnsfp_esm1b') { $column_flags{$col} = 1 if ($row->{$col} && $row->{$col} ne '-'); } @@ -458,11 +458,11 @@ sub table_columns { push @columns, ({ key => 'dbnsfp_revel', title => 'REVEL', sort => 'position_html', align => 'center', help => $glossary->{'REVEL'} }) if $column_flags->{'dbnsfp_revel'}; - push @columns, ({ key => 'dbnsfp_meta_lr', title => 'MetaLR', sort => 'position_html', align => 'center', help => $glossary->{'MetaLR'} }) - if $column_flags->{'dbnsfp_meta_lr'}; + push @columns, ({ key => 'dbnsfp_alphamissense', title => 'AlphaMissense', sort => 'position_html', align => 'center', help => $glossary->{'AlphaMissense'} }) + if $column_flags->{'dbnsfp_alphamissense'}; - push @columns, ({ key => 'dbnsfp_mutation_assessor', title => 'Mutation Assessor', sort => 'position_html', align => 'center', help => $glossary->{'MutationAssessor'} }) - if $column_flags->{'dbnsfp_mutation_assessor'}; + push @columns, ({ key => 'dbnsfp_esm1b', title => 'ESM1b', sort => 'position_html', align => 'center', help => $glossary->{'ESM1b'} }) + if $column_flags->{'dbnsfp_esm1b'}; } push @columns, { key => 'detail', title => 'Detail', sort => 'string' }; @@ -835,6 +835,11 @@ sub render_score_prediction { 'medium' => 'ok', 'low' => 'good', 'neutral' => 'good', + 'benign' => 'good', + 'ambiguous' => 'ok', + 'likely pathogenic' => 'bad', + 'pathogenic' => 'bad', + 'deleterious' => 'bad', ); my %ranks = ( @@ -848,6 +853,11 @@ sub render_score_prediction { 'medium' => 3, 'low' => 2, 'neutral' => 2, + 'benign' => 2, + 'ambiguous' => 3, + 'likely pathogenic' => 4, + 'pathogenic' => 4, + 'deleterious' => 4, ); my ($rank, $rank_str); diff --git a/modules/EnsEMBL/Web/Component/VariationTable.pm b/modules/EnsEMBL/Web/Component/VariationTable.pm index 9191e17369..8544158c29 100644 --- a/modules/EnsEMBL/Web/Component/VariationTable.pm +++ b/modules/EnsEMBL/Web/Component/VariationTable.pm @@ -171,7 +171,7 @@ sub sift_poly_classes { my $sp_classes = predictions_classes; - foreach my $column_name (qw(sift polyphen cadd revel meta_lr mutation_assessor)) { + foreach my $column_name (qw(sift polyphen cadd revel alphamissense esm1b)) { my $value_column = $table->column("${column_name}_value"); my $class_column = $table->column("${column_name}_class"); next unless $value_column and $class_column; @@ -184,12 +184,12 @@ sub sift_poly_classes { # TODO: make decorators accessible to filters. Complexity is that # many decorators (including these) are multi-column. my $lozenge = qq(
%s
); - my $left = { sift => 'bad', polyphen => 'good', cadd => 'good', revel => 'good', meta_lr => 'good', mutation_assessor => 'good'}->{$column_name}; - my $right = { sift => 'good', polyphen => 'bad', cadd => 'bad', revel => 'bad', meta_lr => 'bad', 'mutation_assessor' => 'bad'}->{$column_name}; + my $left = { sift => 'bad', polyphen => 'good', cadd => 'good', revel => 'good', alphamissense => 'good', esm1b => 'good'}->{$column_name}; + my $right = { sift => 'good', polyphen => 'bad', cadd => 'bad', revel => 'bad', alphamissense => 'bad', esm1b => 'bad'}->{$column_name}; $value_column->filter_endpoint_markup(0,sprintf($lozenge,$left,"0")); $value_column->filter_endpoint_markup(1,sprintf($lozenge,$right,"1")); my $slider_class = - { sift => 'redgreen', polyphen => 'greenred', cadd => 'greenred', revel => 'greenred', meta_lr => 'greenred', mutation_assessor => 'greenred'}->{$column_name}; + { sift => 'redgreen', polyphen => 'greenred', cadd => 'greenred', revel => 'greenred', alphamissense => 'greenred', esm1b => 'greenred'}->{$column_name}; $value_column->filter_slider_class("newtable_slider_$slider_class"); } } @@ -333,7 +333,7 @@ sub make_table { } push @exclude,'sift_sort','sift_class','sift_value' unless $sd->{'SIFT'}; unless($hub->species eq 'Homo_sapiens') { - push @exclude,'polyphen_sort','polyphen_class','polyphen_value', 'cadd_sort', 'cadd_class', 'cadd_value', 'revel_sort', 'revel_class', 'revel_value', 'meta_lr_sort', 'meta_lr_class', 'meta_lr_value', 'mutation_assessor_sort', 'mutation_assessor_class', 'mutation_assessor_value'; + push @exclude,'polyphen_sort','polyphen_class','polyphen_value', 'cadd_sort', 'cadd_class', 'cadd_value', 'revel_sort', 'revel_class', 'revel_value', 'alphamissense_sort', 'alphamissense_class', 'alphamissense_value', 'esm1b_sort', 'esm1b_class', 'esm1b_value'; } push @exclude,'Transcript' if $hub->type eq 'Transcript'; @@ -489,27 +489,27 @@ sub make_table { filter_fixed => 1, filter_blank_button => 1, },{ - _key => 'meta_lr_sort', _type => 'numeric no_filter unshowable', - sort_for => 'meta_lr_value', + _key => 'alphamissense_sort', _type => 'numeric no_filter unshowable', + sort_for => 'alphamissense_value', },{ - _key => 'meta_lr_class', _type => 'iconic no_filter unshowable', + _key => 'alphamissense_class', _type => 'iconic no_filter unshowable', },{ - _key => 'meta_lr_value', _type => 'numeric', - label => "MetaLR", - helptip => $glossary->{'MetaLR'}, + _key => 'alphamissense_value', _type => 'numeric', + label => "AlphaMissense", + helptip => $glossary->{'AlphaMissense'}, filter_range => [0,1], filter_fixed => 1, filter_blank_button => 1, },{ - _key => 'mutation_assessor_sort', _type => 'numeric no_filter unshowable', - sort_for => 'mutation_assessor_value', + _key => 'esm1b_sort', _type => 'numeric no_filter unshowable', + sort_for => 'esm1b_value', },{ - _key => 'mutation_assessor_class', _type => 'iconic no_filter unshowable', + _key => 'esm1b_class', _type => 'iconic no_filter unshowable', },{ - _key => 'mutation_assessor_value', _type => 'numeric', - label => "Mutation Assessor", - helptip => $glossary->{'MutationAssessor'}, - filter_range => [0,1], + _key => 'esm1b_value', _type => 'numeric', + label => "ESM1b", + helptip => $glossary->{'ESM1b'}, + filter_range => [-30,10], filter_fixed => 1, filter_blank_button => 1, },{ @@ -721,8 +721,8 @@ sub variation_table { my $polys = classify_sift_polyphen($tva->polyphen_prediction, $tva->polyphen_score); my $cadds = classify_score_prediction($tva->cadd_prediction, $tva->cadd_score); my $revels = classify_score_prediction($tva->dbnsfp_revel_prediction, $tva->dbnsfp_revel_score); - my $meta_lrs = classify_score_prediction($tva->dbnsfp_meta_lr_prediction, $tva->dbnsfp_meta_lr_score); - my $mutation_assessors = classify_score_prediction($tva->dbnsfp_mutation_assessor_prediction, $tva->dbnsfp_mutation_assessor_score); + my $alphamissenses = classify_score_prediction($tva->dbnsfp_alphamissense_prediction, $tva->dbnsfp_alphamissense_score); + my $esm1bs = classify_score_prediction($tva->dbnsfp_esm1b_prediction, $tva->dbnsfp_esm1b_score); # Adds LSDB/LRG sources if ($self->isa('EnsEMBL::Web::Component::LRG::VariationTable')) { @@ -784,12 +784,12 @@ sub variation_table { revel_sort => $revels->[0], revel_class => $revels->[1], revel_value => $revels->[2], - meta_lr_sort => $meta_lrs->[0], - meta_lr_class => $meta_lrs->[1], - meta_lr_value => $meta_lrs->[2], - mutation_assessor_sort => $mutation_assessors->[0], - mutation_assessor_class => $mutation_assessors->[1], - mutation_assessor_value => $mutation_assessors->[2], + alphamissense_sort => $alphamissenses->[0], + alphamissense_class => $alphamissenses->[1], + alphamissense_value => $alphamissenses->[2], + esm1b_sort => $esm1bs->[0], + esm1b_class => $esm1bs->[1], + esm1b_value => $esm1bs->[2], HGVS => $self->param('hgvs') eq 'on' ? ($self->get_hgvs($tva) || '-') : undef, }; $row = { %$row, %$more_row }; diff --git a/modules/EnsEMBL/Web/Utils/Variation.pm b/modules/EnsEMBL/Web/Utils/Variation.pm index 93571512d1..eeeba1232f 100644 --- a/modules/EnsEMBL/Web/Utils/Variation.pm +++ b/modules/EnsEMBL/Web/Utils/Variation.pm @@ -216,6 +216,12 @@ sub predictions_classes { 'deleterious - low confidence' => 'neutral', 'tolerated low confidence' => 'neutral', 'deleterious low confidence' => 'neutral', + + # coming from dbNSFP AlphaMissense and ESM1b + 'ambiguous' => 'ok', + 'likely pathogenic' => 'bad', + 'pathogenic' => 'bad', + 'deleterious' => 'bad', }; } @@ -271,6 +277,11 @@ sub classify_score_prediction { 'medium' => 3, 'low' => 2, 'neutral' => 2, + 'benign' => 2, + 'ambiguous' => 3, + 'likely pathogenic' => 4, + 'pathogenic' => 4, + 'deleterious' => 4, ); my ($rank, $rank_str);