From: Jim Procter Date: Tue, 8 Oct 2013 14:23:40 +0000 (+0100) Subject: Merge branch 'Release_2_8_1_Branch' into Release_2_8_1_Branch_i18n X-Git-Tag: Jalview_2_9~200^2~17^2~1 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=452e24303ecf7861ff827c19fcd0fdaa1d288ea1;hp=64238c060481db2d63a9f6d3e013bcca1693eba5;p=jalview.git Merge branch 'Release_2_8_1_Branch' into Release_2_8_1_Branch_i18n Conflicts: src/jalview/appletgui/APopupMenu.java src/jalview/appletgui/AlignFrame.java --- diff --git a/.classpath b/.classpath index 6cffc21..c22cae5 100644 --- a/.classpath +++ b/.classpath @@ -39,14 +39,15 @@ - + + + - diff --git a/.project b/.project index 5f4b511..aa7e6f2 100644 --- a/.project +++ b/.project @@ -25,16 +25,6 @@ - - org.eclipse.ui.externaltools.ExternalToolBuilder - full,incremental, - - - LaunchConfigHandle - <project>/.externalToolBuilders/buildapplet [Builder].launch - - - org.eclipse.jdt.groovy.core.groovyNature diff --git a/examples/unfolded_RF00031.aln b/examples/unfolded_RF00031.aln new file mode 100644 index 0000000..69a7850 --- /dev/null +++ b/examples/unfolded_RF00031.aln @@ -0,0 +1,126 @@ +CLUSTAL + +B.taurus.1/1-64 C-UUGCGUU--AAUGAGAACAGAAACG-UAAA--CUAUAA-CCUAG-G---------GGU +D.melanogaster.3/1-68 G-UGGCGCU--UAUGACGCAGUUGUCU-UAAA-CUCGAAC--UCGA-GC--------GGG +D.melanogaster.2/1-63 C-AUUCAACU-UAUGAGGAUUAUUUCU-UAAA-GGCCUCU---GGC--U-------CGGA +D.melanogaster.1/1-65 G-AGCC-CU---AUGAUCGAUGAUUGG-CAAA-UCCUCUC--GAGG--A-------ACCG +R.norvegicus.7/1-66 C-CGGCACU--CAUGACGGUCUGCCUG-AAAA-CCAGCCC--GCUG-GU--------GGG +R.norvegicus.6/1-67 G-CCGCUUC---AUGACAGGAAGGACU-GAAA-UGUCUCA-AAGAC--C-----UGUGGU +R.norvegicus.5/1-62 G-UUUUUCC---AUGACGGUGUUUCCUCUAAA--UUUAC----AUG-----------GAG +R.norvegicus.4/1-61 G-UCAGAUG---AUGACGGCCUGUGCA-GAAA-CCCCCAC-GUGGG--C--------UGC +R.norvegicus.3/1-67 U-UUGCAUU--AAUGAGGAUUACACAG-AAAA-CCUUUGU--UAAGGGU--------UUG +R.norvegicus.2/1-64 G-UUACAUU--GAUGAGAACAGAAACA-UAAA--CUAUGA-CCUAG-G---------GGU +R.norvegicus.1/1-61 A-UAUUUGUU-UAUGAUGGUCACAGUG-UAAA--GUUCA----CAC-----------AGC +O.aries.1/1-68 G-ACGCUUC---AUGACAGGAAGGACU-GAAA-UGUCUCU-UGGAC-GC------CUGGU +M.musculus.9/1-66 C-CGGCACU--CAUGAAGGUCUGCUUG-AAAA-CCAGCCU--GCUG-GU--------GGG +M.musculus.8/1-67 U-UUGCAUU--AAUGAGGAUUACACAG-AAAA-CCUUUGU--UAAG-GA-------CUUG +O.niloticus.3/1-65 G-UGUCUCU---GUGAAGUUCGGUUUU-UAAA-AGGGUCA---UCC--A-------GAAA +M.musculus.7/1-64 G-UGUCUCU---AUGAAGGAGGGGCCC-GAAG-CCCUUGU---GGG--C--------GGG +O.niloticus.2/1-61 U-GUUUAUU--AAUGACGGCUACAGAU-UAAA--CCUUU----AGC-----------CUC +M.musculus.6/1-61 G-UCAGAUG---AUGAUGGCCUGGGCA-GAAA-CCCCAUG--UGGG--C--------CGC +O.niloticus.1/1-59 G-UUUCUCA---GUGAAGGCUACAGAU-UAAA--CCUCU----GGC-----------CUC +M.musculus.5/1-66 G-CCGCUUC---AUGACAGGAAGGACU-GAAA-UGUCUUA---GAC--C-----UGUGGU +M.musculus.4/1-65 G-UGUGCGA---AUGAUAACUACUGAC-GAAA-GAGCUGU-CUGCU--C-------AGUC +M.musculus.3/1-64 G-GUUCUUC--CAUGAUGGUGUUUCCUCUAAA--UUUGC----ACG-----------GAG +M.musculus.2/1-64 G-UUACAUU--AAUGAGAACAGAAACA-UAAA--CUAUGA-CCUAG-G---------GGU +M.musculus.1/1-64 G-UCACCGA---AUGAUCUGCUCUGGU-CAAA-UCCUUCU---AUG--C------CAGCC +C.elegans.1/1-64 G-AGGCAGCUUUGUGACGACCUUUGGC-UAAA-CUCCAUC--GUGA-GC--------GCC +H.sapiens.15/1-63 U-UUUCAUC--UAUGAGGGUGUUUCCUCUAAA--CCUACG---AGG-----------GAG +H.sapiens.14/1-62 C-ACUGCUG---AUGACGAACUAUCUC-UAAC-UGGUCUU--GACC--A-------CGAG +H.sapiens.13/1-64 G-UCACUGC---AUGAUCCGCUCUGGU-CAAA-CCCUUCC---AGG--C------CAGCC +H.sapiens.12/1-67 C-UCUGUUA---AUGACGUCUCUCCCUCUAAA-CCCCAUU-AAGGA--C--------UGG +D.rerio.1/1-66 A-UGUGGUCUUUAUGAAGGCAGGUGCA-GAAA-CUAUGCA---CUA-GU--------GGU +H.sapiens.11/1-63 G-CCGGAUG---AUGACGACCUGGGUG-GAAA-CCUACCC-UGUGG--G--------CAC +H.sapiens.10/1-62 C-CGGCACU--CAUGACGGCCUGCCUG-CAAA--CCUGC----UGG--U--------GGG +S.mansoni.1/1-67 C-UCGCUAU---AUGACGAUGGCAAUC-UCAA--AUGUU----CAU--U--------GGU +S.scrofa.4/1-64 C-UGGCACC--CAUGACAGUCUGCCUA-AAAA-CCAGCC----CUG-GU--------GGG +S.scrofa.3/1-63 A-UUUUAUC--CAUGAAAGUGUUUCCUCUAAA--CCUAU----GUG-----------GAG +S.scrofa.2/1-65 C-UGGCACC--CAUGACAGUCUGCCUA-AAAA-CCAGCCC---CUG-GU--------GGG +S.scrofa.1/1-68 G-ACGCUUC---AUGACAGGAAGGACU-GAAA-UGUCUUG-UGGAC-GC------CUGGU +H.sapiens.9/1-58 U-AUUUGUU--UAUGAUGGCCACAGCC-UAAA--GUACA----CAC-----------GGC +H.sapiens.8/1-67 U-UUGCUUU--AAUGAGAAUAGAAACG-UAAA--CUAUGA-CCUAG-G---------GGU +X.laevis.1/1-67 G-UGUUUGCA-AAUGACGACCGAUUUU-GAAA-UGGUCUCACGGCC--A-------AAAA +H.sapiens.7/1-70 U-GGCGUCUU-CAUGAGGGAGGGGCCC--AAA-GCCCUUG--UGGG--C--------GGA +H.sapiens.6/1-66 G-UGUGCGG---AUGAUAACUACUGAC-GAAAGAGUCAUC---GAC--C-----UCAGUU +H.sapiens.5/1-57 U-UCACAGA---AUGAUGGCACCUUCC-UAA---ACCCU----CAU-----------GGG +H.sapiens.4/1-71 G-ACUGACAU-UAUGAAGGCCUGUACU-GAAG-ACAGCAA--GCUG--U-------UAGU +H.sapiens.3/1-68 G-ACGCUUC---AUGAUAGGAAGGACU-GAAA-AGUCUUG-UGGAC--A-----CCUGGU +H.sapiens.2/1-65 G-UGUGCGG---AUGAUAACUACUGAC-GAAA-GAGUCAU-CGACU--C-------AGUU +H.sapiens.1/1-63 G-CCAGAUG---AUGACGACCUGGGUG-GAAA-CCUACCC-UGUGG--G--------CAC +M.musculus.14/1-67 C-UCUGAUA---AUGAUGUCUCUCCCU-CUAA-CUCCCAGUAAGGA--C--------UGG +M.musculus.13/1-60 C-AUGCGUC--CAUGAAGUCACUGGCC-UCAA-GCCCAA----GUG-GU--------GGG +M.musculus.12/1-65 C-UCAGCAG--GAUGAUGAGAAGGGCU-GAAA-UGCUGCC--AAAC--C-------AGGU +M.musculus.11/1-63 U-AUUUGUG--UAUGAUGGUCACAGUG-UAAA--GUUCC----CAC-----------AGC +M.musculus.10/1-66 C-CGGCACU--CAUGAAGGUCUGCCUG-AAAA-CCAGCCU--GCUG-GU--------GGG +B.taurus.7/1-61 U-UUUGCCC---AUGAAGGUGUUCCCUCUAAA--CCUAC----GUG-----------GAG +B.taurus.6/1-67 G-AUGCGUC--CAUGAAGUCACCAGCC-CCAA-GCCCCUC---GUG-GU--------GGG +B.taurus.5/1-61 G-CCAGAUG---AUGAGGACCUGUGCG-GAAA-CCCCCCG--CGGG--C--------UGC +B.taurus.4/1-64 ACUUGCGUU--AAUGAGAACAGAAACG-UAAA--CUAUAA-CCUAG-G---------GGU +G.gallus.3/1-73 U-AUUUCUU--UGUGAUGACCGAUUUU-GAAA-UGGGUUU---CUC--UAAUGCCAGGAA +B.taurus.3/1-66 C-CCGGUGCC-UAUGACGGUCUGUCUG-AAAA-CCAGCCC---CUG-GU--------GGG +G.gallus.2/1-60 U-AUUUGUC---AUGACAGUCACAGCA-UAAA--GCGCA----GAC-----------GGC +B.taurus.2/1-64 C-UUGCGUU--AAUGAGAACAGAAACG-AAAA--CUAUAA-CCUAG-G---------GGU +G.gallus.1/1-63 G-UGUGUUU---AUGAAGAGCACUAAC-AAAA-GAGUAAU-UGACU--C-------AGUU + +B.taurus.1/1-64 UUC-U-G-UUGGAU--GGUUG-------GCAAC +D.melanogaster.3/1-68 CAA-U-U-GCUGAU---UACG---AUUAACCAC +D.melanogaster.2/1-63 AAU-A-G-UCUGAA---CCU--------UAUUG +D.melanogaster.1/1-65 AUC-G-U-UGAGAA--CCCCU-----UUGCCUU +R.norvegicus.7/1-66 GCA-G-U-CCCGAG-GACCUG-------GCGUG +R.norvegicus.6/1-67 CUU-U-C-UUCGAU--GUUCU-------GCGGC +R.norvegicus.5/1-62 AAA-C-A-CCUGAU-UUCCAG------AAAAAU +R.norvegicus.4/1-61 -CA-G-G-UUUGAA---CCC--------CUGGC +R.norvegicus.3/1-67 UGUCG-A-UCUGCU--AAUUG-------GCAAA +R.norvegicus.2/1-64 UUC-U-G-UUGGAU--AGCUC-------GUAAU +R.norvegicus.1/1-61 UGU-G-A-CUUGAU--UUUUA-------AAAAU +O.aries.1/1-68 CCU-U-C-CUUGAU--GUUCU------CACGGC +M.musculus.9/1-66 GCA-G-U-CCUGAG-GACCUG-------GCGUG +M.musculus.8/1-67 UGU-AGA-UCUGAU--AAUUG-------GCAAA +O.niloticus.3/1-65 ACC-G-ACACUGAU--GUUUC------CGACAC +M.musculus.7/1-64 CCU-C-C-CCUGAG---CCCG----UCUGUGGU +O.niloticus.2/1-61 UGG-A-G-CCAGAU--GCAUU------CAAACA +M.musculus.6/1-61 CCA-G-G-UUUGAA---CCC--------CUGGC +O.niloticus.1/1-59 UGG-A-G-CCAGAU--GCAUU-------GAAAC +M.musculus.5/1-66 CUU-U-C-CUCGAU--GUUCC------UGCGGC +M.musculus.4/1-65 UGU-G-G-UUGGAU---GUAG------UCACAC +M.musculus.3/1-64 AAA-C-A-CCUGAU-UUCCAG-----GAAAAUC +M.musculus.2/1-64 UUC-U-G-UUGGAU--AGCUU-------GUAAU +M.musculus.1/1-64 AGG-G-U-GGUGAU--GACCC-------GUGAC +C.elegans.1/1-64 UCU-G-G-UCUGAU---GC---------GCCUC +H.sapiens.15/1-63 GAA-C-A-CCUGAU---CUUA-----CAGAAAA +H.sapiens.14/1-62 CUA-G-U-UCUGAA---UU-G-------CAGGG +H.sapiens.13/1-64 AGA-G-U-GGGGAU--GGUCU-------GUGAC +H.sapiens.12/1-67 GAG-A-G-GCAGAGCAAGCCU-------CAGAG +D.rerio.1/1-66 GUC-U-G-UCUGAU--GUUUG-------GCCAU +H.sapiens.11/1-63 CCA-U-G-UCCGAG---CCCC-------CUGGC +H.sapiens.10/1-62 GCA-G-A-CCCGAA-AAUCCA-------GCGUG +S.mansoni.1/1-67 UGC-C-A-UUUGAU--GAAAUCAGUUUUGUGUG +S.scrofa.4/1-64 GCA-G-A-CUCGAG-AACCUG-------GCGUG +S.scrofa.3/1-63 GAA-C-A-CCUGAU-GUCCAG------GAAAAU +S.scrofa.2/1-65 GCA-G-A-CUCGAG-AACCUG-------GCGUG +S.scrofa.1/1-68 CCU-U-C-CCUGAU--GUUCU------CAUGGC +H.sapiens.9/1-58 UGU-G-A-CUUGAU---UCA--------AAAGA +H.sapiens.8/1-67 UUC-U-G-UUGGAU-AAUUAG-----CAGUUUA +X.laevis.1/1-67 CUC-GUG-UCCGAC---AUC--------AACCC +H.sapiens.7/1-70 CCU-C-C-CCUGAG---CCUGUCUGAGGGGCCA +H.sapiens.6/1-66 AGU-G-G-UUGGAU---GUAG------UCACAU +H.sapiens.5/1-57 UGG-U-G-UCUGAG--AGGC--------GUGAA +H.sapiens.4/1-71 ACA-G-A-CCAGAU--GCUUU--CUUGGCAGGC +H.sapiens.3/1-68 CUU-U-C-CCUGAU--GUUCU------CGUGGC +H.sapiens.2/1-65 AGU-G-G-UUGGAU---GUAG------UCACAU +H.sapiens.1/1-63 CCA-U-G-UCCGAG---CCCC-------CUGGC +M.musculus.14/1-67 GAG-A-G-GCUGAACAAACCU-------CAGAG +M.musculus.13/1-60 CAG-U-G-ACAGAA---GA---------GCUGC +M.musculus.12/1-65 CCU-U-U-UCUGAU--GGUGG-------CUGGG +M.musculus.11/1-63 UGU-G-A-CUUGAU--UUUUA----AAAAUGUC +M.musculus.10/1-66 GCA-G-U-CCUGAG-GACCUG-------GCGUG +B.taurus.7/1-61 GAA-U-G-CCUGAU-GUCCAG-------GAAAA +B.taurus.6/1-67 UGG-U-G-AUGGAA-CCGUCA-----AAGCAGU +B.taurus.5/1-61 CCA-U-G-UCUGAG---CCC--------CUGGC +B.taurus.4/1-64 UUC-U-G-UUGGAU--GGUUG-------GCAA- +G.gallus.3/1-73 AUC-GUG-UCUGAU---GUUG-----UCAAGUA +B.taurus.3/1-66 GCA-G-A-CCUGAG-AACCUG-------GCGUG +G.gallus.2/1-60 UGU-G-A-CCUGAU--UUUAG------AAAAUA +B.taurus.2/1-64 UUC-U-G-UUGGAU--GGUUG-------GCAAC +G.gallus.1/1-63 GGU-G-U-UCAGAU--GCU---------CUCAC + diff --git a/help/help.jhm b/help/help.jhm index b850b79..aaaaaf8 100755 --- a/help/help.jhm +++ b/help/help.jhm @@ -37,6 +37,7 @@ + diff --git a/help/helpTOC.xml b/help/helpTOC.xml index 0d2e096..e27d41a 100755 --- a/help/helpTOC.xml +++ b/help/helpTOC.xml @@ -22,6 +22,7 @@ + @@ -65,6 +66,7 @@ + diff --git a/help/html/menus/alignmentMenu.html b/help/html/menus/alignmentMenu.html index 9ec5adc..d53b3eb 100755 --- a/help/html/menus/alignmentMenu.html +++ b/help/html/menus/alignmentMenu.html @@ -235,17 +235,21 @@ Any columns currently not selected will replace the current column selection. -
  • Undefine Groups (Control U)
    The - alignment will be reset with no defined groups.
    WARNING: - This cannot be undone.
    -
  • -
  • Make Groups
    The currently +
  • Create Group (Control G)
    + Create a group containing the currently selected sequences.
  • +
  • Remove Group (Shift Control G)
    + Ungroup the currently selected sequence group. (Create/Remove group new in Jalview 2.8.1)
  • +
  • Make Groups for selection
    The currently selected groups of the alignment will be subdivided according to the contents of the currently selected region.
    Use this to subdivide an alignment based on the different combinations of residues observed at specific positions. (new in jalview 2.5)
  • - +
  • Undefine Groups (Control U)
    The + alignment will be reset with no defined groups.
    WARNING: + This cannot be undone.
    +
  • +
  • View
    • New View (Control T)
      diff --git a/help/html/menus/alwselect.html b/help/html/menus/alwselect.html index c4b3002..bd17fa7 100644 --- a/help/html/menus/alwselect.html +++ b/help/html/menus/alwselect.html @@ -38,11 +38,16 @@
    • Invert Column Selection (Control Alt I)
      Any columns currently not selected will replace the current column selection.
    • -
    • Undefine Groups (Control U)
      -
      The alignment will be reset with no defined groups.
      - WARNING: This cannot be undone.
    • -
    • Make Groups
      +
    • Create Group (Control G)
      + Create a group containing the currently selected sequences.
    • +
    • Remove Group (Shift Control G)
      + Ungroup the currently selected sequence group. (Create/Remove group new in Jalview 2.8.1)
    • +
    • Make Groups for selection
      The currently selected groups of the alignment will be subdivided according to the contents of the currently selected region.
      Use this to subdivide an alignment based on the different combinations of residues observed at specific positions. (new in jalview 2.5)
    • +
    • Undefine Groups (Control U)
      +
      The alignment will be reset with no defined groups.
      + WARNING: This cannot be undone.
    • +
    diff --git a/help/html/menus/popupMenu.html b/help/html/menus/popupMenu.html index 7c3db2c..8eab2d0 100755 --- a/help/html/menus/popupMenu.html +++ b/help/html/menus/popupMenu.html @@ -59,18 +59,22 @@ not be accessible when in 'Cursor Mode' (toggled with the F2 key).

  • Create Sequence Feature...
    Opens the dialog box for creating sequence features over the currently selected region on each selected sequence.
  • -
  • Group
    - Group Operations -
      -
    • GroupThis is the first entry in the - menu, and will display the currently selected group's - name. Selecting it displays a window allowing the name and - description for this group to be edited. Click OK to set the - new name and decription, and cancel to leave the existing - name and description unchanged.
    • +
    • Create Group
      +
      This will define a new group from the current selection. +
    • Remove Group
      This will undefine the selected group.
    • +
    • Edit (New) Group
      + Group Editing Menu
      Options in this menu modify + the name and display properties of the currently selected group, or + a new group defined using the current selection. +
        +
      • Name: <Group> or Edit name and description
        The first entry in the + menu displays the name for the currently selected group, if it has one. Selecting this option opens a window allowing the name and + description for this group to be edited. Click OK to set the + new name and decription, and cancel to leave the existing + name and description unchanged.
      • Group Colour
        Sets the colour of the group.
      • diff --git a/help/html/webServices/RNAalifold.html b/help/html/webServices/RNAalifold.html new file mode 100644 index 0000000..ac9df34 --- /dev/null +++ b/help/html/webServices/RNAalifold.html @@ -0,0 +1,74 @@ + + + + +RNAalifold Web Service + + + RNAalifold RNA Alignment Secondary Structure + Prediction Service +

        + RNAalifold is part of the Vienna + RNA Secondary Structure Prediction and Comparison Package. It was + described in 2008 by Ivo L. Hofacker, Sebastian Will, Andreas R. + Gruber, and Peter F. Stadler, RNAalifold: Improved consensus + structure prediction for RNA alignments. (BMC + Bioinformatics, 9:474, 2008). +

        +

        + Example RNAalifold Output
        + RNAalifold prints a consensus alignment and mfe structure to stdout with its + associated energy. Depending on the arguments given, other information such as + alternate structures are displayed below while base pairing probabilities (-p or --MEA + options) are stored in a separate 'alifold.out' file.
        +


        +G_UUUCAUU___AUGACGGCCUGUGCU_UAAA__CCUCC____GAG__C________GGGUCA_G_G_UCUGAU___CUUG_______GAGAC +(.((((...........(((((((((........(((......)))............))))).).).))..................))))) (-19.16 = -11.80 + -7.36) +(.((((...........(((((((((........(((......)))............))))).).).))..................))))) [-19.32] + frequency of mfe structure in ensemble 0.765639 +(.((((...........(((((((((........(((......)))............))))).).).))..................))))) -19.16 {-11.80 + -7.36} +(.((((...........(((((((((........(((......)))............))))).).).))..................))))) { 13.20 MEA=92.14} + +Alifold.out + 6 89 9 99.2% 0.023 CG:29 GC:14 UA:9 + 4 91 11 99.1% 0.028 CG:20 GC:11 UG:2 UA:17 + 3 92 18 96.9% 0.090 CG:5 GC:2 GU:1 UG:4 AU:6 UA:25 + 35 46 3 93.3% 0.195 CG:31 GC:16 UG:2 AU:5 UA:4 + 36 45 10 93.6% 0.185 CG:16 GC:6 GU:1 UG:2 AU:8 UA:18 + . + . + . +
        +

        +

        + Running RNAalifold from Jalview
        + To run RNAalifold go to Webservices→RNA Structure Prediction + and choose RNAalifold Defaults to run with no arguments or + edit settings and run ... to adjust the parameters before running. + Details of all the RNAalifold parameters can be found in the + RNAalifold Manpage. + JABAWS and Jalview support a selection of the RNAalifold arguments only. +

        +

        Supported Arguments which give alternate structures

        +

        + Partition Function (-p)
        + Calculate the Partition Function and base pairing probability matrix in addition to the mfe + structure. A coarse representation of the pair probabilities in the from of a psuedo + bracket notation, as well as the centroid structure derived from the pair probabilities + are displayed. The most likely base pairings are stored in a separate file by RNAalifold + and represented in Jalview by a bar graph annotation line labelled 'Contact Probabilities'. +

        +

        + Maximum Expected Accuracy Structure (--MEA)
        + Calculate an MEA structure where the expected Accuracy is computed from the base pair + probabilities. A more detailed description is found in the + RNAfold documentation. +

        +

        Example RNAalifold Structure Annotation rows

        + +

        +
        + + + \ No newline at end of file diff --git a/help/html/webServices/RNAalifoldAnnotationRows.png b/help/html/webServices/RNAalifoldAnnotationRows.png new file mode 100644 index 0000000..5077d19 Binary files /dev/null and b/help/html/webServices/RNAalifoldAnnotationRows.png differ diff --git a/lib/min-jaba-client-2.0.jar b/lib/min-jaba-client-2.0.jar deleted file mode 100644 index 4ba3f33..0000000 Binary files a/lib/min-jaba-client-2.0.jar and /dev/null differ diff --git a/lib/min-jabaws-client-2.1.0.jar b/lib/min-jabaws-client-2.1.0.jar new file mode 100644 index 0000000..7ad030a Binary files /dev/null and b/lib/min-jabaws-client-2.1.0.jar differ diff --git a/src/jalview/analysis/AAFrequency.java b/src/jalview/analysis/AAFrequency.java index 50b1b4b..df5ca8d 100755 --- a/src/jalview/analysis/AAFrequency.java +++ b/src/jalview/analysis/AAFrequency.java @@ -19,6 +19,7 @@ package jalview.analysis; import java.util.*; +import jalview.util.Format; import jalview.datamodel.*; /** @@ -90,7 +91,7 @@ public class AAFrequency Hashtable residueHash; int maxCount, nongap, i, j, v, jSize = sequences.length; String maxResidue; - char c; + char c='-'; float percentage; int[] values = new int[255]; @@ -104,7 +105,7 @@ public class AAFrequency maxResidue = ""; nongap = 0; values = new int[255]; - + for (j = 0; j < jSize; j++) { if (sequences[j] == null) @@ -142,8 +143,11 @@ public class AAFrequency values['-']++; } } - - for (v = 'A'; v < 'Z'; v++) + if (jSize==1) + { + maxResidue = String.valueOf(c); + maxCount=1; + } else {for (v = 'A'; v < 'Z'; v++) { if (values[v] < 2 || values[v] < maxCount) { @@ -160,7 +164,7 @@ public class AAFrequency } maxCount = values[v]; } - + } if (maxResidue.length() == 0) { maxResidue = "-"; @@ -194,14 +198,15 @@ public class AAFrequency * @param width * @param ignoreGapsInConsensusCalculation * @param includeAllConsSymbols + * @param nseq */ public static void completeConsensus(AlignmentAnnotation consensus, Hashtable[] hconsensus, int iStart, int width, boolean ignoreGapsInConsensusCalculation, - boolean includeAllConsSymbols) + boolean includeAllConsSymbols, long nseq) { completeConsensus(consensus, hconsensus, iStart, width, - ignoreGapsInConsensusCalculation, includeAllConsSymbols, null); // new + ignoreGapsInConsensusCalculation, includeAllConsSymbols, null, nseq); // new // char[] // { 'A', 'C', 'G', 'T', 'U' }); } @@ -209,7 +214,7 @@ public class AAFrequency public static void completeConsensus(AlignmentAnnotation consensus, Hashtable[] hconsensus, int iStart, int width, boolean ignoreGapsInConsensusCalculation, - boolean includeAllConsSymbols, char[] alphabet) + boolean includeAllConsSymbols, char[] alphabet, long nseq) { float tval, value; if (consensus == null || consensus.annotations == null @@ -219,6 +224,23 @@ public class AAFrequency // initialised properly return; } + String fmtstr="%3.1f"; + int precision=0; + while (nseq>=10) { + precision++; + nseq/=10; + } + final Format fmt; + if (precision>1) + { + //if (precision>2) + { + fmtstr = "%"+(2+precision)+"."+(precision)+"f"; + } + fmt = new Format(fmtstr); + } else { + fmt = null; + } for (int i = iStart; i < width; i++) { Hashtable hci; @@ -229,7 +251,6 @@ public class AAFrequency consensus.annotations[i] = null; continue; } - value = 0; Float fv; if (ignoreGapsInConsensusCalculation) @@ -265,7 +286,7 @@ public class AAFrequency tval = profile[0][alphabet[c]] * 100f / profile[1][ignoreGapsInConsensusCalculation ? 1 : 0]; mouseOver += ((c == 0) ? "" : "; ") + alphabet[c] + " " - + ((int) tval) + "%"; + + ((fmt!=null) ? fmt.form(tval) : ((int) tval)) + "%"; } } else @@ -288,7 +309,7 @@ public class AAFrequency * 100f / profile[1][ignoreGapsInConsensusCalculation ? 1 : 0]; mouseOver += ((p == 0) ? "" : "; ") + ((char[]) ca[c])[0] - + " " + ((int) tval) + "%"; + + " " + ((fmt!=null) ? fmt.form(tval) : ((int) tval)) + "%"; p++; } @@ -298,7 +319,7 @@ public class AAFrequency } else { - mouseOver += ((int) value + "%"); + mouseOver += ((fmt!=null) ? fmt.form(value) : ((int) value)) + "%"; } consensus.annotations[i] = new Annotation(maxRes, mouseOver, ' ', value); diff --git a/src/jalview/analysis/StructureFrequency.java b/src/jalview/analysis/StructureFrequency.java index 08bb3fd..948bdc1 100644 --- a/src/jalview/analysis/StructureFrequency.java +++ b/src/jalview/analysis/StructureFrequency.java @@ -21,6 +21,7 @@ package jalview.analysis; import java.util.*; +import jalview.util.Format; import jalview.datamodel.*; /** @@ -299,7 +300,7 @@ public class StructureFrequency public static void completeConsensus(AlignmentAnnotation consensus, Hashtable[] hconsensus, int iStart, int width, boolean ignoreGapsInConsensusCalculation, - boolean includeAllConsSymbols) + boolean includeAllConsSymbols, long nseq) { float tval, value; if (consensus == null || consensus.annotations == null @@ -309,6 +310,18 @@ public class StructureFrequency // initialised properly return; } + String fmtstr="%3.1f"; + int precision=2; + while (nseq>100) { + precision++; + nseq/=10; + } + if (precision>2) + { + fmtstr = "%"+(2+precision)+"."+precision+"f"; + } + Format fmt = new Format(fmtstr); + for (int i = iStart; i < width; i++) { Hashtable hci; @@ -385,7 +398,7 @@ public class StructureFrequency tval = (vl[c] * 100f / profile[1][ignoreGapsInConsensusCalculation ? 1 : 0]); mouseOver += ((p == 0) ? "" : "; ") + (char) ((int[]) ca[c])[0] - + (char) ((int[]) ca[c])[1] + " " + ((int) tval) + "%"; + + (char) ((int[]) ca[c])[1] + " " + fmt.form(tval) + "%"; p++; } @@ -395,7 +408,7 @@ public class StructureFrequency } else { - mouseOver += ((int) value + "%"); + mouseOver += (fmt.form(value) + "%"); } consensus.annotations[i] = new Annotation(maxRes, mouseOver, ' ', value); diff --git a/src/jalview/api/AlignViewControllerI.java b/src/jalview/api/AlignViewControllerI.java new file mode 100644 index 0000000..fc63fd6 --- /dev/null +++ b/src/jalview/api/AlignViewControllerI.java @@ -0,0 +1,24 @@ +package jalview.api; + +/** + * prototype abstract controller for a Jalview alignment view + * @author jimp + * + * All operations should return true if the view has changed as a result of the operation + * @param + * + */ +public interface AlignViewControllerI +{ + + public boolean makeGroupsFromSelection(); + + public boolean createGroup(); + + public boolean unGroup(); + + public boolean deleteGroups(); + + public void setViewportAndAlignmentPanel(AlignViewportI viewport, AlignmentViewPanel alignPanel); + +} diff --git a/src/jalview/api/AlignViewportI.java b/src/jalview/api/AlignViewportI.java index f42293d..5f759b8 100644 --- a/src/jalview/api/AlignViewportI.java +++ b/src/jalview/api/AlignViewportI.java @@ -17,13 +17,17 @@ */ package jalview.api; +import java.awt.Color; import java.util.Hashtable; import java.util.Map; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; +import jalview.datamodel.AlignmentView; +import jalview.datamodel.CigarArray; import jalview.datamodel.ColumnSelection; import jalview.datamodel.SequenceCollectionI; +import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.schemes.ColourSchemeI; @@ -155,4 +159,29 @@ public interface AlignViewportI void updateGroupAnnotationSettings(boolean applyGlobalSettings, boolean preserveNewGroupSettings); + void setSequenceColour(SequenceI seq, Color col); + + Color getSequenceColour(SequenceI seq); + + void updateSequenceIdColours(); + + SequenceGroup getSelectionGroup(); + + SequenceI[] getSequenceSelection(); + + void clearSequenceColours(); + + CigarArray getViewAsCigars(boolean selectedRegionOnly); + + AlignmentView getAlignmentView(boolean selectedOnly); + + AlignmentView getAlignmentView(boolean selectedOnly, boolean markGroups); + + String[] getViewAsString(boolean selectedRegionOnly); + + void setSelectionGroup(SequenceGroup sg); + + char getGapCharacter(); + + } diff --git a/src/jalview/appletgui/APopupMenu.java b/src/jalview/appletgui/APopupMenu.java index ce1bae2..c51653d 100644 --- a/src/jalview/appletgui/APopupMenu.java +++ b/src/jalview/appletgui/APopupMenu.java @@ -70,6 +70,8 @@ public class APopupMenu extends java.awt.PopupMenu implements MenuItem unGroupMenuItem = new MenuItem(); + MenuItem createGroupMenuItem = new MenuItem(); + MenuItem nucleotideMenuItem = new MenuItem(); Menu colourMenu = new Menu(); @@ -167,7 +169,11 @@ public class APopupMenu extends java.awt.PopupMenu implements displayNonconserved.setState(sg.getShowNonconserved()); if (!ap.av.getAlignment().getGroups().contains(sg)) { + menu1.setLabel(MessageManager.getString("action.edit_new_group")); groupMenu.remove(unGroupMenuItem); + } else { + menu1.setLabel(MessageManager.getString("action.edit_group")); + groupMenu.remove(createGroupMenuItem); } } @@ -458,6 +464,11 @@ public class APopupMenu extends java.awt.PopupMenu implements unGroupMenuItem_actionPerformed(); } + else if (source == createGroupMenuItem) + { + createGroupMenuItem_actionPerformed(); + } + else if (source == sequenceName) { editName(); @@ -730,7 +741,6 @@ public class APopupMenu extends java.awt.PopupMenu implements private void jbInit() throws Exception { - groupMenu.setLabel(MessageManager.getString("label.group")); groupMenu.setLabel(MessageManager.getString("label.selection")); sequenceFeature.addActionListener(this); @@ -738,6 +748,9 @@ public class APopupMenu extends java.awt.PopupMenu implements unGroupMenuItem.setLabel(MessageManager.getString("action.remove_group")); unGroupMenuItem.addActionListener(this); + createGroupMenuItem.setLabel(MessageManager.getString("action.create_group")); + createGroupMenuItem.addActionListener(this); + nucleotideMenuItem.setLabel(MessageManager.getString("label.nucleotide")); nucleotideMenuItem.addActionListener(this); conservationMenuItem.addItemListener(this); @@ -770,10 +783,11 @@ public class APopupMenu extends java.awt.PopupMenu implements this.add(revealSeq); this.add(revealAll); // groupMenu.add(selSeqDetails); - groupMenu.add(editGroupName); groupMenu.add(editMenu); groupMenu.add(outputmenu); groupMenu.add(sequenceFeature); + groupMenu.add(createGroupMenuItem); + groupMenu.add(unGroupMenuItem); groupMenu.add(menu1); colourMenu.add(noColourmenuItem); @@ -843,7 +857,7 @@ public class APopupMenu extends java.awt.PopupMenu implements seqMenu.add(pdb); } seqMenu.add(repGroup); - menu1.add(unGroupMenuItem); + menu1.add(editGroupName); menu1.add(colourMenu); menu1.add(showBoxes); menu1.add(showText); @@ -1027,6 +1041,12 @@ public class APopupMenu extends java.awt.PopupMenu implements ap.paintAlignment(true); } + void createGroupMenuItem_actionPerformed() + { + getGroup(); // implicitly create group + refresh(); + } + public void showColourText_itemStateChanged() { getGroup().setColourText(showColourText.getState()); diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 865f0d4..564f28c 100644 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -19,6 +19,7 @@ package jalview.appletgui; import jalview.analysis.AlignmentSorter; import jalview.analysis.Conservation; +import jalview.api.AlignViewControllerI; import jalview.api.SequenceStructureBinding; import jalview.bin.JalviewLite; import jalview.commands.CommandI; @@ -93,6 +94,7 @@ import java.util.Vector; public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemListener, KeyListener { + public AlignViewControllerI avc; public AlignmentPanel alignPanel; public AlignViewport viewport; @@ -121,7 +123,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport = new AlignViewport(al, applet); alignPanel = new AlignmentPanel(this, viewport); - + avc = new jalview.controller.AlignViewController(viewport, alignPanel); viewport.updateConservation(alignPanel); viewport.updateConsensus(alignPanel); @@ -542,6 +544,20 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } break; + case KeyEvent.VK_G: + if (evt.isControlDown()) + { + if (evt.isShiftDown()) + { + this.unGroup_actionPerformed(); + } + else + { + this.createGroup_actionPerformed(); + } + } + break; + case KeyEvent.VK_U: if (evt.isControlDown()) { @@ -1887,41 +1903,30 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, protected void makeGrpsFromSelection_actionPerformed() { - if (viewport.getSelectionGroup() != null) - { - SequenceGroup[] gps = jalview.analysis.Grouping.makeGroupsFrom( - viewport.getSequenceSelection(), - viewport.getAlignmentView(true).getSequenceStrings( - viewport.getGapCharacter()), viewport.getAlignment() - .getGroups()); - viewport.getAlignment().deleteAllGroups(); - viewport.sequenceColours = null; - viewport.setSelectionGroup(null); - // set view properties for each group - for (int g = 0; g < gps.length; g++) - { - // gps[g].setShowunconserved(viewport.getShowUnconserved()); - gps[g].setshowSequenceLogo(viewport.isShowSequenceLogo()); - viewport.getAlignment().addGroup(gps[g]); - Color col = new Color((int) (Math.random() * 255), - (int) (Math.random() * 255), (int) (Math.random() * 255)); - col = col.brighter(); - for (SequenceI sq : gps[g].getSequences(null)) - viewport.setSequenceColour(sq, col); - } + if (avc.makeGroupsFromSelection()) { PaintRefresher.Refresh(this, viewport.getSequenceSetId()); alignPanel.updateAnnotation(); alignPanel.paintAlignment(true); } } + protected void createGroup_actionPerformed() + { + avc.createGroup(); + } + protected void unGroup_actionPerformed() + { + if (avc.unGroup()) + { + alignPanel.alignmentChanged(); + } + } protected void deleteGroups_actionPerformed() { - viewport.getAlignment().deleteAllGroups(); - viewport.sequenceColours = null; - viewport.setSelectionGroup(null); - - alignPanel.paintAlignment(true); + if (avc.deleteGroups()) + { + alignPanel.alignmentChanged(); + } } public void selectAllSequenceMenuItem_actionPerformed() @@ -2866,6 +2871,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem grpsFromSelection = new MenuItem(); + MenuItem createGroup = new MenuItem(); + + MenuItem unGroup = new MenuItem(); + MenuItem delete = new MenuItem(); MenuItem copy = new MenuItem(); @@ -3074,6 +3083,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, deleteGroups.addActionListener(this); grpsFromSelection.setLabel(MessageManager.getString("action.make_groups_selection")); grpsFromSelection.addActionListener(this); + createGroup.setLabel(MessageManager.getString("action.create_group")); + unGroup.setLabel(MessageManager.getString("action.remove_group")); copy.setLabel(MessageManager.getString("action.copy")); copy.addActionListener(this); cut.setLabel(MessageManager.getString("action.cut")); @@ -3302,6 +3313,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, selectMenu.add(deselectAllSequenceMenuItem); selectMenu.add(invertSequenceMenuItem); selectMenu.add(invertColSel); + selectMenu.add(createGroup); + selectMenu.add(unGroup); selectMenu.add(grpsFromSelection); selectMenu.add(deleteGroups); diff --git a/src/jalview/appletgui/AlignViewport.java b/src/jalview/appletgui/AlignViewport.java index cc04b58..9e4f071 100644 --- a/src/jalview/appletgui/AlignViewport.java +++ b/src/jalview/appletgui/AlignViewport.java @@ -91,8 +91,6 @@ public class AlignViewport extends AlignmentViewport implements public jalview.bin.JalviewLite applet; - Hashtable sequenceColours; - boolean MAC = false; Stack historyList = new Stack(); @@ -592,35 +590,6 @@ public class AlignViewport extends AlignmentViewport implements showHiddenMarkers = show; } - public Color getSequenceColour(SequenceI seq) - { - if (sequenceColours == null || !sequenceColours.containsKey(seq)) - { - return Color.white; - } - else - { - return (Color) sequenceColours.get(seq); - } - } - - public void setSequenceColour(SequenceI seq, Color col) - { - if (sequenceColours == null) - { - sequenceColours = new Hashtable(); - } - - if (col == null) - { - sequenceColours.remove(seq); - } - else - { - sequenceColours.put(seq, col); - } - } - boolean centreColumnLabels; public boolean getCentreColumnLabels() @@ -628,21 +597,6 @@ public class AlignViewport extends AlignmentViewport implements return centreColumnLabels; } - public void updateSequenceIdColours() - { - - for (SequenceGroup sg : alignment.getGroups()) - { - if (sg.idColour != null) - { - for (SequenceI s : sg.getSequences(getHiddenRepSequences())) - { - this.setSequenceColour(s, sg.idColour); - } - } - } - } - public boolean followHighlight = true; public boolean getFollowHighlight() diff --git a/src/jalview/appletgui/TreeCanvas.java b/src/jalview/appletgui/TreeCanvas.java index 5c62234..68ffd7a 100755 --- a/src/jalview/appletgui/TreeCanvas.java +++ b/src/jalview/appletgui/TreeCanvas.java @@ -578,7 +578,7 @@ public class TreeCanvas extends Panel implements MouseListener, av.setSelectionGroup(null); av.getAlignment().deleteAllGroups(); - av.sequenceColours = null; + av.clearSequenceColours(); colourGroups(); diff --git a/src/jalview/controller/AlignViewController.java b/src/jalview/controller/AlignViewController.java new file mode 100644 index 0000000..16e8cdd --- /dev/null +++ b/src/jalview/controller/AlignViewController.java @@ -0,0 +1,100 @@ +package jalview.controller; + +import java.awt.Color; + +import jalview.api.AlignViewControllerI; +import jalview.api.AlignViewportI; +import jalview.api.AlignmentViewPanel; +import jalview.datamodel.SequenceGroup; +import jalview.datamodel.SequenceI; + +public class AlignViewController implements AlignViewControllerI +{ + AlignViewportI viewport=null; + AlignmentViewPanel alignPanel=null; + @Override + protected void finalize() throws Throwable { + viewport = null; + alignPanel = null; + }; + + public AlignViewController(AlignViewportI viewport, + AlignmentViewPanel alignPanel) + { + this.viewport=viewport; + this.alignPanel = alignPanel; + } + @Override + public void setViewportAndAlignmentPanel(AlignViewportI viewport,AlignmentViewPanel alignPanel) + { + this.alignPanel = alignPanel; + this.viewport = viewport; + + } + @Override + public boolean makeGroupsFromSelection() + { + + if (viewport.getSelectionGroup() != null) + { + SequenceGroup[] gps = jalview.analysis.Grouping.makeGroupsFrom( + viewport.getSequenceSelection(), + viewport.getAlignmentView(true).getSequenceStrings( + viewport.getGapCharacter()), viewport.getAlignment() + .getGroups()); + viewport.getAlignment().deleteAllGroups(); + viewport.clearSequenceColours(); + viewport.setSelectionGroup(null); + // set view properties for each group + for (int g = 0; g < gps.length; g++) + { + // gps[g].setShowunconserved(viewport.getShowUnconserved()); + gps[g].setshowSequenceLogo(viewport.isShowSequenceLogo()); + viewport.getAlignment().addGroup(gps[g]); + Color col = new Color((int) (Math.random() * 255), + (int) (Math.random() * 255), (int) (Math.random() * 255)); + col = col.brighter(); + for (SequenceI sq : gps[g].getSequences(null)) + viewport.setSequenceColour(sq, col); + } + return true; + } + return false; +} + @Override + public boolean createGroup() + { + + SequenceGroup sg = viewport.getSelectionGroup(); + if (sg!=null) + { + viewport.getAlignment().addGroup(sg); + return true; + } + return false; + } + @Override + public boolean unGroup() + { + SequenceGroup sg = viewport.getSelectionGroup(); + if (sg!=null) + { + viewport.getAlignment().deleteGroup(sg); + return true; + } + return false; + } + @Override + public boolean deleteGroups() + { + if (viewport.getAlignment().getGroups()!=null && viewport.getAlignment().getGroups().size()>0) + { + viewport.getAlignment().deleteAllGroups(); + viewport.clearSequenceColours(); + viewport.setSelectionGroup(null); + return true; + } + return false; + } + + } diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index 580c850..fa063ff 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -707,6 +707,7 @@ public class Sequence implements SequenceI { tmp = new char[i]; System.arraycopy(sequence, 0, tmp, 0, i); + j=sequence.length; } else { @@ -715,6 +716,9 @@ public class Sequence implements SequenceI System.arraycopy(sequence, j, tmp, i, sequence.length - j); } boolean createNewDs = false; + // TODO: take a look at the new dataset creation validation method below - + // this could become time comsuming for large sequences - consider making it + // more efficient for (int s = i; s < j; s++) { if (jalview.schemes.ResidueProperties.aaIndex[sequence[s]] != 23) diff --git a/src/jalview/datamodel/SequenceGroup.java b/src/jalview/datamodel/SequenceGroup.java index 65dc13f..5fcd2bf 100755 --- a/src/jalview/datamodel/SequenceGroup.java +++ b/src/jalview/datamodel/SequenceGroup.java @@ -493,7 +493,7 @@ public class SequenceGroup implements AnnotatedCollectionI endRes + 1, showSequenceLogo); if (consensus != null) { - _updateConsensusRow(cnsns); + _updateConsensusRow(cnsns, sequences.size()); } if (cs != null) { @@ -552,7 +552,7 @@ public class SequenceGroup implements AnnotatedCollectionI public Hashtable[] consensusData = null; - private void _updateConsensusRow(Hashtable[] cnsns) + private void _updateConsensusRow(Hashtable[] cnsns, long nseq) { if (consensus == null) { @@ -569,7 +569,7 @@ public class SequenceGroup implements AnnotatedCollectionI consensus.annotations = new Annotation[aWidth]; // should be alignment width AAFrequency.completeConsensus(consensus, cnsns, startRes, endRes + 1, - ignoreGapsInConsensus, showSequenceLogo); // TODO: setting container + ignoreGapsInConsensus, showSequenceLogo, nseq); // TODO: setting container // for // ignoreGapsInConsensusCalculation); } diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 423f7b9..e2fe90c 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -24,6 +24,7 @@ import jalview.analysis.CrossRef; import jalview.analysis.NJTree; import jalview.analysis.ParseProperties; import jalview.analysis.SequenceIdMatcher; +import jalview.api.AlignViewControllerI; import jalview.bin.Cache; import jalview.commands.CommandI; import jalview.commands.EditCommand; @@ -78,6 +79,7 @@ import jalview.schemes.ZappoColourScheme; import jalview.util.MessageManager; import jalview.ws.jws1.Discoverer; import jalview.ws.jws2.Jws2Discoverer; +import jalview.ws.jws2.jabaws2.Jws2Instance; import jalview.ws.seqfetcher.DbSourceProxy; import java.awt.BorderLayout; @@ -145,6 +147,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public AlignmentPanel alignPanel; AlignViewport viewport; + + public AlignViewControllerI avc; + Vector alignPanels = new Vector(); @@ -288,6 +293,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ void init() { + avc = new jalview.controller.AlignViewController(viewport, alignPanel); if (viewport.getAlignmentConservationAnnotation() == null) { BLOSUM62Colour.setEnabled(false); @@ -330,7 +336,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } addKeyListener(); - + } /** @@ -557,6 +563,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public void addAlignmentPanel(final AlignmentPanel ap, boolean newPanel) { ap.alignFrame = this; + avc = new jalview.controller.AlignViewController(viewport, alignPanel); alignPanels.addElement(ap); @@ -734,7 +741,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, rnahelicesColour .setSelected(av.getGlobalColourScheme() instanceof jalview.schemes.RNAHelicesColour); setShowProductsEnabled(); - updateEditMenuBar(); } @@ -2132,12 +2138,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override protected void deleteGroups_actionPerformed(ActionEvent e) { - viewport.getAlignment().deleteAllGroups(); - viewport.sequenceColours = null; - viewport.setSelectionGroup(null); - PaintRefresher.Refresh(this, viewport.getSequenceSetId()); - alignPanel.updateAnnotation(); - alignPanel.paintAlignment(true); + if (avc.deleteGroups()) { + PaintRefresher.Refresh(this, viewport.getSequenceSetId()); + alignPanel.updateAnnotation(); + alignPanel.paintAlignment(true); + } } /** @@ -4149,6 +4154,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void run() { + final List legacyItems=new ArrayList(); try { System.err.println("Building ws menu again " @@ -4180,28 +4186,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // TODO: refactor to allow list of AbstractName/Handler bindings to // be // stored or retrieved from elsewhere - Vector msaws = null; // (Vector) Discoverer.services.get("MsaWS"); + // No MSAWS used any more: + // Vector msaws = null; // (Vector) Discoverer.services.get("MsaWS"); Vector secstrpr = (Vector) Discoverer.services .get("SecStrPred"); - Vector seqsrch = null; // (Vector) - // Discoverer.services.get("SeqSearch"); - // TODO: move GUI generation code onto service implementation - so a - // client instance attaches itself to the GUI with method call like - // jalview.ws.MsaWSClient.bind(servicehandle, Desktop.instance, - // alignframe) - if (msaws != null) - { - // Add any Multiple Sequence Alignment Services - for (int i = 0, j = msaws.size(); i < j; i++) - { - final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws - .get(i); - jalview.ws.WSMenuEntryProviderI impl = jalview.ws.jws1.Discoverer - .getServiceClient(sh); - impl.attachWSMenuEntry(msawsmenu, me); - - } - } if (secstrpr != null) { // Add any secondary structure prediction services @@ -4211,35 +4199,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, .get(i); jalview.ws.WSMenuEntryProviderI impl = jalview.ws.jws1.Discoverer .getServiceClient(sh); + int p=secstrmenu.getItemCount(); impl.attachWSMenuEntry(secstrmenu, me); - } - } - if (seqsrch != null) - { - // Add any sequence search services - for (int i = 0, j = seqsrch.size(); i < j; i++) - { - final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) seqsrch - .elementAt(i); - jalview.ws.WSMenuEntryProviderI impl = jalview.ws.jws1.Discoverer - .getServiceClient(sh); - impl.attachWSMenuEntry(seqsrchmenu, me); + int q=secstrmenu.getItemCount(); + for (int litm=p;litm submens=new ArrayList(); - // submens.add(msawsmenu); - // submens.add(secstrmenu); - // submens.add(dismenu); - // submens.add(analymenu); - // No search services yet // wsmenu.add(seqsrchmenu); @@ -4264,6 +4240,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, webService.add(me.webServiceNoServices); } // TODO: move into separate menu builder class. + boolean new_sspred=false; if (Cache.getDefault("SHOW_JWS2_SERVICES", true)) { Jws2Discoverer jws2servs = Jws2Discoverer.getDiscoverer(); @@ -4272,6 +4249,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (jws2servs.hasServices()) { jws2servs.attachWSMenuEntry(webService, me); + for (Jws2Instance sv:jws2servs.getServices()) { + if (sv.description.toLowerCase().contains("jpred")) + { + for (JMenuItem jmi:legacyItems) + { + jmi.setVisible(false); + } + } + } + } if (jws2servs.isRunning()) { @@ -4282,7 +4269,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } } - build_urlServiceMenu(me.webService); build_fetchdbmenu(webService); for (JMenu item : wsmenu) @@ -5020,6 +5006,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { alignPanel = (AlignmentPanel) alignPanels.elementAt(index); viewport = alignPanel.av; + avc.setViewportAndAlignmentPanel(viewport, alignPanel); setMenusFromViewport(viewport); } } @@ -5460,34 +5447,31 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override protected void makeGrpsFromSelection_actionPerformed(ActionEvent e) { - if (viewport.getSelectionGroup() != null) - { - SequenceGroup[] gps = jalview.analysis.Grouping.makeGroupsFrom( - viewport.getSequenceSelection(), - viewport.getAlignmentView(true).getSequenceStrings( - viewport.getGapCharacter()), viewport.getAlignment() - .getGroups()); - viewport.getAlignment().deleteAllGroups(); - viewport.sequenceColours = null; - viewport.setSelectionGroup(null); - // set view properties for each group - for (int g = 0; g < gps.length; g++) - { - gps[g].setShowNonconserved(viewport.getShowUnconserved()); - gps[g].setshowSequenceLogo(viewport.isShowSequenceLogo()); - viewport.getAlignment().addGroup(gps[g]); - Color col = new Color((int) (Math.random() * 255), - (int) (Math.random() * 255), (int) (Math.random() * 255)); - col = col.brighter(); - for (SequenceI s : gps[g].getSequences()) - viewport.setSequenceColour(s, col); - } + if (avc.makeGroupsFromSelection()) { PaintRefresher.Refresh(this, viewport.getSequenceSetId()); alignPanel.updateAnnotation(); alignPanel.paintAlignment(true); } } + @Override + protected void createGroup_actionPerformed(ActionEvent e) + { + if (avc.createGroup()) + { + alignPanel.alignmentChanged(); + } + } + + @Override + protected void unGroup_actionPerformed(ActionEvent e) + { + if (avc.unGroup()) + { + alignPanel.alignmentChanged(); + } + } + /** * make the given alignmentPanel the currently selected tab * diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index 7a01b27..407fa94 100644 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -138,8 +138,6 @@ public class AlignViewport extends AlignmentViewport implements Stack redoList = new Stack(); - Hashtable sequenceColours; - int thresholdTextColour = 0; Color textColour = Color.black; @@ -934,35 +932,6 @@ public class AlignViewport extends AlignmentViewport implements showHiddenMarkers = show; } - public Color getSequenceColour(SequenceI seq) - { - if (sequenceColours == null || !sequenceColours.containsKey(seq)) - { - return Color.white; - } - else - { - return (Color) sequenceColours.get(seq); - } - } - - public void setSequenceColour(SequenceI seq, Color col) - { - if (sequenceColours == null) - { - sequenceColours = new Hashtable(); - } - - if (col == null) - { - sequenceColours.remove(seq); - } - else - { - sequenceColours.put(seq, col); - } - } - /** * returns the visible column regions of the alignment * @@ -1044,23 +1013,6 @@ public class AlignViewport extends AlignmentViewport implements centreColumnLabels = centrecolumnlabels; } - public void updateSequenceIdColours() - { - if (sequenceColours == null) - { - sequenceColours = new Hashtable(); - } - for (SequenceGroup sg : alignment.getGroups()) - { - if (sg.idColour != null) - { - for (SequenceI s : sg.getSequences(getHiddenRepSequences())) - { - sequenceColours.put(s, sg.idColour); - } - } - } - } /** * enable or disable the display of Database Cross References in the sequence diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index 9e096be..ce731ad 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -665,7 +665,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, && aa[row].annotations[res].description != null && aa[row].annotations[res].description.length() > 0) { - this.setToolTipText(aa[row].annotations[res].description); + this.setToolTipText(""+JvSwingUtils.wrapTooltip(aa[row].annotations[res].description)+""); } else { diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index f77e64d..f4d1885 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -648,8 +648,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements // A HEADLESS STATE WHEN NO DESKTOP EXISTS. MUST RETURN // IF JALVIEW IS RUNNING HEADLESS // /////////////////////////////////////////////// - if (System.getProperty("java.awt.headless") != null - && System.getProperty("java.awt.headless").equals("true")) + if (instance == null || (System.getProperty("java.awt.headless") != null + && System.getProperty("java.awt.headless").equals("true"))) { return; } @@ -2435,7 +2435,9 @@ public class Desktop extends jalview.jbgui.GDesktop implements { boolean alive = true; Thread t0 = null, t1 = null, t2 = null; - + // JAL-940 - JALVIEW 1 services are now being EOLed as of JABA 2.1 release + if (true) + { // todo: changesupport handlers need to be transferred if (discoverer == null) { @@ -2445,28 +2447,31 @@ public class Desktop extends jalview.jbgui.GDesktop implements } // JAL-940 - disabled JWS1 service configuration - always start discoverer // until we phase out completely - if (true) - { (t0 = new Thread(discoverer)).start(); } - try + // ENFIN services are EOLed as of Jalview 2.8.1 release + if (false) { - if (Cache.getDefault("SHOW_ENFIN_SERVICES", true)) + try { - // EnfinEnvision web service menu entries are rebuild every time the - // menu is shown, so no changeSupport events are needed. - jalview.ws.EnfinEnvision2OneWay.getInstance(); - (t1 = new Thread(jalview.ws.EnfinEnvision2OneWay.getInstance())) - .start(); + if (Cache.getDefault("SHOW_ENFIN_SERVICES", true)) + { + // EnfinEnvision web service menu entries are rebuild every time the + // menu is shown, so no changeSupport events are needed. + jalview.ws.EnfinEnvision2OneWay.getInstance(); + (t1 = new Thread(jalview.ws.EnfinEnvision2OneWay.getInstance())) + .start(); + } + } catch (Exception e) + { + Cache.log + .info("Exception when trying to launch Envision2 workflow discovery.", + e); + Cache.log.info(e.getStackTrace()); } - } catch (Exception e) - { - Cache.log - .info("Exception when trying to launch Envision2 workflow discovery.", - e); - Cache.log.info(e.getStackTrace()); } + if (Cache.getDefault("SHOW_JWS2_SERVICES", true)) { if (jalview.ws.jws2.Jws2Discoverer.getDiscoverer().isRunning()) diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index e88b190..2ec76a7 100644 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -429,7 +429,7 @@ public class Jalview2XML object.setVamsasModel(new jalview.schemabinding.version2.VamsasModel()); object.setCreationDate(new java.util.Date(System.currentTimeMillis())); - object.setVersion(jalview.bin.Cache.getProperty("VERSION")); + object.setVersion(jalview.bin.Cache.getDefault("VERSION","Development Build")); jalview.datamodel.AlignmentI jal = av.getAlignment(); diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index 1a367c5..29370ac 100644 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -89,7 +89,7 @@ public class PopupMenu extends JPopupMenu JMenuItem sequenceSelDetails = new JMenuItem(); SequenceI sequence; - + JMenuItem createGroupMenuItem = new JMenuItem(); JMenuItem unGroupMenuItem = new JMenuItem(); JMenuItem outline = new JMenuItem(); @@ -392,9 +392,10 @@ public class PopupMenu extends JPopupMenu } SequenceGroup sg = ap.av.getSelectionGroup(); + boolean isDefinedGroup = (sg!=null) ? ap.av.getAlignment().getGroups().contains(sg) : false; if (sg != null && sg.getSize() > 0) - { + { groupName.setText("Name: " + sg.getName()); groupName.setText("Edit name and description of current group."); @@ -520,9 +521,15 @@ public class PopupMenu extends JPopupMenu editMenu.setVisible(false); } - if (!ap.av.getAlignment().getGroups().contains(sg)) + if (!isDefinedGroup) { + createGroupMenuItem.setVisible(true); unGroupMenuItem.setVisible(false); + jMenu1.setText("Edit New Group"); + } else { + createGroupMenuItem.setVisible(false); + unGroupMenuItem.setVisible(true); + jMenu1.setText("Edit Group"); } if (seq == null) @@ -935,6 +942,14 @@ public class PopupMenu extends JPopupMenu unGroupMenuItem_actionPerformed(); } }); + createGroupMenuItem.setText("Create Group"); + createGroupMenuItem.addActionListener(new java.awt.event.ActionListener() + { + public void actionPerformed(ActionEvent e) + { + createGroupMenuItem_actionPerformed(); + } + }); outline.setText("Border colour"); outline.addActionListener(new java.awt.event.ActionListener() @@ -1097,6 +1112,8 @@ public class PopupMenu extends JPopupMenu groupMenu.add(editMenu); groupMenu.add(outputMenu); groupMenu.add(sequenceFeature); + groupMenu.add(createGroupMenuItem); + groupMenu.add(unGroupMenuItem); groupMenu.add(jMenu1); sequenceMenu.add(sequenceName); sequenceMenu.add(sequenceDetails); @@ -1153,7 +1170,6 @@ public class PopupMenu extends JPopupMenu pdbMenu.add(enterPDB); pdbMenu.add(discoverPDB); jMenu1.add(groupName); - jMenu1.add(unGroupMenuItem); jMenu1.add(colourMenu); jMenu1.add(showBoxes); jMenu1.add(showText); @@ -1726,6 +1742,11 @@ public class PopupMenu extends JPopupMenu ap.av.setSelectionGroup(null); refresh(); } + void createGroupMenuItem_actionPerformed() + { + getGroup(); // implicitly creates group - note - should apply defaults / use standard alignment window logic for this + refresh(); + } /** * DOCUMENT ME! diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index fbf6a91..c71b154 100644 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -130,8 +130,7 @@ public class SeqPanel extends JPanel implements MouseListener, addMouseMotionListener(this); addMouseListener(this); addMouseWheelListener(this); - ssm = StructureSelectionManager - .getStructureSelectionManager(Desktop.instance); + ssm = av.getStructureSelectionManager(); ssm.addStructureViewerListener(this); ssm.addSelectionListener(this); } diff --git a/src/jalview/gui/TreeCanvas.java b/src/jalview/gui/TreeCanvas.java index ce44054..09708da 100755 --- a/src/jalview/gui/TreeCanvas.java +++ b/src/jalview/gui/TreeCanvas.java @@ -852,7 +852,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, { aps[a].av.setSelectionGroup(null); aps[a].av.getAlignment().deleteAllGroups(); - aps[a].av.sequenceColours = null; + aps[a].av.clearSequenceColours(); } colourGroups(); } diff --git a/src/jalview/jbgui/GAlignFrame.java b/src/jalview/jbgui/GAlignFrame.java index de1487a..f070c84 100755 --- a/src/jalview/jbgui/GAlignFrame.java +++ b/src/jalview/jbgui/GAlignFrame.java @@ -182,6 +182,9 @@ public class GAlignFrame extends JInternalFrame public JCheckBoxMenuItem showSeqFeaturesHeight = new JCheckBoxMenuItem(); JMenuItem deleteGroups = new JMenuItem(); + + JMenuItem createGroup = new JMenuItem(); + JMenuItem unGroup = new JMenuItem(); JMenuItem delete = new JMenuItem(); @@ -618,7 +621,7 @@ public class GAlignFrame extends JInternalFrame invertSequenceMenuItem_actionPerformed(e); } }); - grpsFromSelection.setText("Make Groups for selection"); + grpsFromSelection.setText("Make Groups For Selection"); grpsFromSelection.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) @@ -1200,6 +1203,28 @@ public class GAlignFrame extends JInternalFrame deleteGroups_actionPerformed(e); } }); + createGroup.setText("Create group"); + createGroup.setAccelerator(javax.swing.KeyStroke.getKeyStroke( + java.awt.event.KeyEvent.VK_G, Toolkit.getDefaultToolkit() + .getMenuShortcutKeyMask(), false)); + createGroup.addActionListener(new java.awt.event.ActionListener() + { + public void actionPerformed(ActionEvent e) + { + createGroup_actionPerformed(e); + } + }); + unGroup.setText("Remove Group"); + unGroup.setAccelerator(javax.swing.KeyStroke.getKeyStroke( + java.awt.event.KeyEvent.VK_G,Toolkit.getDefaultToolkit() + .getMenuShortcutKeyMask() | java.awt.event.KeyEvent.SHIFT_MASK, false)); + unGroup.addActionListener(new java.awt.event.ActionListener() + { + public void actionPerformed(ActionEvent e) + { + unGroup_actionPerformed(e); + } + }); copy.setText("Copy"); copy.setAccelerator(javax.swing.KeyStroke.getKeyStroke( java.awt.event.KeyEvent.VK_C, Toolkit.getDefaultToolkit() @@ -1947,8 +1972,10 @@ public class GAlignFrame extends JInternalFrame selectMenu.add(deselectAllSequenceMenuItem); selectMenu.add(invertSequenceMenuItem); selectMenu.add(invertColSel); - selectMenu.add(deleteGroups); + selectMenu.add(createGroup); + selectMenu.add(unGroup); selectMenu.add(grpsFromSelection); + selectMenu.add(deleteGroups); // TODO - determine if the listenToViewSelections button is needed : see bug // JAL-574 // selectMenu.addSeparator(); @@ -2308,6 +2335,14 @@ public class GAlignFrame extends JInternalFrame protected void deleteGroups_actionPerformed(ActionEvent e) { } + + protected void createGroup_actionPerformed(ActionEvent e) + { + } + + protected void unGroup_actionPerformed(ActionEvent e) + { + } protected void copy_actionPerformed(ActionEvent e) { diff --git a/src/jalview/schemes/RNAHelicesColour.java b/src/jalview/schemes/RNAHelicesColour.java index 168aa31..a2ffff5 100644 --- a/src/jalview/schemes/RNAHelicesColour.java +++ b/src/jalview/schemes/RNAHelicesColour.java @@ -66,7 +66,8 @@ public class RNAHelicesColour extends ResidueColourScheme public void refresh() { - if (lastrefresh != annotation._rnasecstr.hashCode() + if ((annotation._rnasecstr == null + || lastrefresh != annotation._rnasecstr.hashCode()) && annotation.isValidStruc()) { annotation.getRNAStruc(); diff --git a/src/jalview/schemes/RNAHelicesColourChooser.java b/src/jalview/schemes/RNAHelicesColourChooser.java index 25b65b3..cef7eb6 100644 --- a/src/jalview/schemes/RNAHelicesColourChooser.java +++ b/src/jalview/schemes/RNAHelicesColourChooser.java @@ -97,8 +97,24 @@ public class RNAHelicesColourChooser return; } - currentAnnotation = av.getAlignment().getAlignmentAnnotation()[0];// annotations.getSelectedIndex()]; - + // This loop will find the first rna structure annotation by which to colour + // the sequences. + AlignmentAnnotation[] annotations = av.getAlignment().getAlignmentAnnotation(); + for (int i = 0; i < annotations.length; i++) { + + // is this a sensible way of determining type of annotation? + if (annotations[i].getRNAStruc() != null) { + currentAnnotation = annotations[i]; + break; + } + } + if (currentAnnotation == null) + { + System.err.println("Jalview is about to try and colour by RNAHelices even" + + " though there are no RNA secondary structure annotations present!"); + currentAnnotation = av.getAlignment().getAlignmentAnnotation()[0];// annotations.getSelectedIndex()]; + } + RNAHelicesColour rhc = null; rhc = new RNAHelicesColour(currentAnnotation); diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 7415712..8d684c1 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -53,13 +53,25 @@ public class StructureSelectionManager } Hashtable mappingData = new Hashtable(); - + private static StructureSelectionManager nullProvider = null; public static StructureSelectionManager getStructureSelectionManager( StructureSelectionManagerProvider context) { - if (context==null) - { - throw new Error("Implementation error. Structure selection manager's context is 'null'", new NullPointerException("SSM context is null")); + if (context==null) { + if (nullProvider == null) + { + if (instances != null) + { + throw new Error( + "Implementation error. Structure selection manager's context is 'null'", + new NullPointerException("SSM context is null")); + } + else + { + nullProvider = new StructureSelectionManager(); + } + return nullProvider; + } } if (instances == null) { @@ -68,7 +80,13 @@ public class StructureSelectionManager StructureSelectionManager instance = instances.get(context); if (instance == null) { - instances.put(context, instance = new StructureSelectionManager()); + if (nullProvider!=null) + { + instance = nullProvider; + } else { + instance = new StructureSelectionManager(); + } + instances.put(context, instance); } return instance; } diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index d65486d..cceff86 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -40,6 +40,7 @@ import jalview.workers.AlignCalcManager; import jalview.workers.ConsensusThread; import jalview.workers.StrucConsensusThread; +import java.awt.Color; import java.util.ArrayList; import java.util.Hashtable; import java.util.List; @@ -594,6 +595,7 @@ public abstract class AlignmentViewport implements AlignViewportI * * @return null or the currently selected sequence region */ + @Override public SequenceGroup getSelectionGroup() { return selectionGroup; @@ -606,6 +608,7 @@ public abstract class AlignmentViewport implements AlignViewportI * - group holding references to sequences in this alignment view * */ + @Override public void setSelectionGroup(SequenceGroup sg) { selectionGroup = sg; @@ -781,6 +784,8 @@ public abstract class AlignmentViewport implements AlignViewportI protected boolean showConsensus = true; + Hashtable sequenceColours; + /** * Property change listener for changes in alignment * @@ -1054,6 +1059,7 @@ public abstract class AlignmentViewport implements AlignViewportI * * @return array of references to sequence objects */ + @Override public SequenceI[] getSequenceSelection() { SequenceI[] sequences = null; @@ -1076,6 +1082,7 @@ public abstract class AlignmentViewport implements AlignViewportI * * @return String[] */ + @Override public jalview.datamodel.CigarArray getViewAsCigars( boolean selectedRegionOnly) { @@ -1092,6 +1099,7 @@ public abstract class AlignmentViewport implements AlignViewportI * boolean true to just return the selected view * @return AlignmentView */ + @Override public jalview.datamodel.AlignmentView getAlignmentView( boolean selectedOnly) { @@ -1110,6 +1118,7 @@ public abstract class AlignmentViewport implements AlignViewportI * is true) * @return AlignmentView */ + @Override public jalview.datamodel.AlignmentView getAlignmentView( boolean selectedOnly, boolean markGroups) { @@ -1125,6 +1134,7 @@ public abstract class AlignmentViewport implements AlignViewportI * * @return String[] */ + @Override public String[] getViewAsString(boolean selectedRegionOnly) { String[] selection = null; @@ -1535,4 +1545,60 @@ public abstract class AlignmentViewport implements AlignViewportI oldrfs.clear(); } + @Override + public Color getSequenceColour(SequenceI seq) + { + Color sqc=Color.white; + if (sequenceColours != null) + { + sqc = (Color) sequenceColours.get(seq); + if (sqc == null) { + sqc = Color.white; + } + } + return sqc; + } + + @Override + public void setSequenceColour(SequenceI seq, Color col) + { + if (sequenceColours == null) + { + sequenceColours = new Hashtable(); + } + + if (col == null) + { + sequenceColours.remove(seq); + } + else + { + sequenceColours.put(seq, col); + } + } + + @Override + public void updateSequenceIdColours() + { + if (sequenceColours == null) + { + sequenceColours = new Hashtable(); + } + for (SequenceGroup sg : alignment.getGroups()) + { + if (sg.idColour != null) + { + for (SequenceI s : sg.getSequences(getHiddenRepSequences())) + { + sequenceColours.put(s, sg.idColour); + } + } + } + } + + @Override + public void clearSequenceColours() + { + sequenceColours = null; + }; } diff --git a/src/jalview/workers/ConsensusThread.java b/src/jalview/workers/ConsensusThread.java index 343e64d..c2b4d66 100644 --- a/src/jalview/workers/ConsensusThread.java +++ b/src/jalview/workers/ConsensusThread.java @@ -24,6 +24,7 @@ import jalview.api.AlignmentViewPanel; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; +import jalview.datamodel.SequenceI; import jalview.schemes.ColourSchemeI; import java.util.Hashtable; @@ -31,6 +32,8 @@ import java.util.Hashtable; public class ConsensusThread extends AlignCalcWorker implements AlignCalcWorkerI { + private long nseq=-1; + public ConsensusThread(AlignViewportI alignViewport, AlignmentViewPanel alignPanel) { @@ -94,7 +97,9 @@ public class ConsensusThread extends AlignCalcWorker implements hconsensus = new Hashtable[aWidth]; try { - AAFrequency.calculate(alignment.getSequencesArray(), 0, + SequenceI aseqs[] = alignment.getSequencesArray(); + nseq = aseqs.length; + AAFrequency.calculate(aseqs, 0, alignment.getWidth(), hconsensus, true); } catch (ArrayIndexOutOfBoundsException x) { @@ -150,7 +155,7 @@ public class ConsensusThread extends AlignCalcWorker implements { AAFrequency.completeConsensus(consensus, hconsensus, 0, hconsensus.length, alignViewport.getIgnoreGapsConsensus(), - alignViewport.isShowSequenceLogo()); + alignViewport.isShowSequenceLogo(), nseq); } } } diff --git a/src/jalview/workers/StrucConsensusThread.java b/src/jalview/workers/StrucConsensusThread.java index 86c3336..25e5cde 100644 --- a/src/jalview/workers/StrucConsensusThread.java +++ b/src/jalview/workers/StrucConsensusThread.java @@ -26,6 +26,7 @@ import jalview.api.AlignmentViewPanel; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; +import jalview.datamodel.SequenceI; public class StrucConsensusThread extends AlignCalcWorker implements AlignCalcWorkerI @@ -40,6 +41,8 @@ public class StrucConsensusThread extends AlignCalcWorker implements Hashtable[] hStrucConsensus; + private long nseq=-1; + @Override public void run() { @@ -107,8 +110,10 @@ public class StrucConsensusThread extends AlignCalcWorker implements try { - jalview.analysis.StructureFrequency.calculate( - alignment.getSequencesArray(), 0, alignment.getWidth(), + final SequenceI[] arr= + alignment.getSequencesArray(); + nseq = arr.length; + jalview.analysis.StructureFrequency.calculate(arr, 0, alignment.getWidth(), hStrucConsensus, true, rnaStruc); } catch (ArrayIndexOutOfBoundsException x) { @@ -159,7 +164,7 @@ public class StrucConsensusThread extends AlignCalcWorker implements StructureFrequency.completeConsensus(strucConsensus, hStrucConsensus, 0, hStrucConsensus.length, alignViewport.getIgnoreGapsConsensus(), - alignViewport.isShowSequenceLogo()); + alignViewport.isShowSequenceLogo(), nseq); } } diff --git a/src/jalview/ws/jws2/AAConClient.java b/src/jalview/ws/jws2/AAConClient.java index 7f3847b..2750293 100644 --- a/src/jalview/ws/jws2/AAConClient.java +++ b/src/jalview/ws/jws2/AAConClient.java @@ -23,6 +23,7 @@ import jalview.gui.AlignmentPanel; import jalview.ws.jws2.dm.AAConSettings; import jalview.ws.jws2.jabaws2.Jws2Instance; import jalview.ws.params.WsParamSetI; +import jalview.ws.uimodel.AlignAnalysisUIText; import java.util.ArrayList; import java.util.List; @@ -48,23 +49,6 @@ public class AAConClient extends JabawsAlignCalcWorker initViewportParams(); } - protected void initViewportParams() - { - ((jalview.gui.AlignViewport) alignViewport).setCalcIdSettingsFor( - getCalcId(), - new AAConSettings(true, service, this.preset, - (arguments != null) ? JabaParamStore - .getJwsArgsfromJaba(arguments) : null), true); - } - - @Override - public void updateParameters(WsParamSetI newpreset, - java.util.List newarguments) - { - super.updateParameters(newpreset, newarguments); - initViewportParams(); - }; - public String getServiceActionText() { return "calculating Amino acid consensus using AACon service"; @@ -114,17 +98,21 @@ public class AAConClient extends JabawsAlignCalcWorker } } + @Override public String getCalcId() { - return SequenceAnnotationWSClient.AAConCalcId; + return CALC_ID; } + private static String CALC_ID="jabaws2.AACon"; - public static void removeAAConsAnnotation(AlignmentPanel alignPanel) + public static AlignAnalysisUIText getAlignAnalysisUITest() { - for (AlignmentAnnotation aa : alignPanel.getAlignment().findAnnotation( - SequenceAnnotationWSClient.AAConCalcId)) - { - alignPanel.getAlignment().deleteAnnotation(aa); - } + return new AlignAnalysisUIText( + compbio.ws.client.Services.AAConWS.toString(), + jalview.ws.jws2.AAConClient.class, CALC_ID, false, true, true, + "AACon Calculations", + "When checked, AACon calculations are updated automatically.", + "Change AACon Settings...", + "Modify settings for AACon calculations."); } } diff --git a/src/jalview/ws/jws2/AADisorderClient.java b/src/jalview/ws/jws2/AADisorderClient.java index 3c19dc5..8db1358 100644 --- a/src/jalview/ws/jws2/AADisorderClient.java +++ b/src/jalview/ws/jws2/AADisorderClient.java @@ -41,7 +41,7 @@ import compbio.data.sequence.Score; import compbio.data.sequence.ScoreManager.ScoreHolder; import compbio.metadata.Argument; -public class AADisorderClient extends JabawsAlignCalcWorker implements +public class AADisorderClient extends JabawsCalcWorker implements AlignCalcWorkerI { diff --git a/src/jalview/ws/jws2/JabaWsServerQuery.java b/src/jalview/ws/jws2/JabaWsServerQuery.java index 73d5654..fe61ff3 100644 --- a/src/jalview/ws/jws2/JabaWsServerQuery.java +++ b/src/jalview/ws/jws2/JabaWsServerQuery.java @@ -22,6 +22,7 @@ package jalview.ws.jws2; import jalview.bin.Cache; import jalview.ws.jws2.jabaws2.Jws2Instance; +import jalview.ws.jws2.jabaws2.Jws2InstanceFactory; import java.util.HashSet; import java.util.Set; @@ -75,7 +76,7 @@ public class JabaWsServerQuery implements Runnable { Services.ClustalWS, Services.MuscleWS, Services.MafftWS, Services.ProbconsWS, Services.TcoffeeWS, Services.AAConWS, Services.DisemblWS, Services.GlobPlotWS, Services.IUPredWS, - Services.JronnWS }; + Services.JronnWS, Services.RNAalifoldWS }; /* * (non-Javadoc) @@ -115,7 +116,14 @@ public class JabaWsServerQuery implements Runnable jabasws2 = true; srv_set = registry.getSupportedServices(); + + // dan test + System.out.println("registry.getSupportedServices: " + srv_set.toString()); + svccategories = registry.getServiceCategories(); + + // dan test +// System.out.println("registry.getServiceCategories: " + svccategories.toString()); } } catch (Exception ex) @@ -170,12 +178,12 @@ public class JabaWsServerQuery implements Runnable String description = registry.getServiceDescription(srv); - svc = new Jws2Instance(jwsservers, srv.toString(), + svc = Jws2InstanceFactory.newJws2Instance(jwsservers, srv.toString(), cat.name, description, service); } if (svc == null) { - svc = new Jws2Instance(jwsservers, srv.toString(), + svc = Jws2InstanceFactory.newJws2Instance(jwsservers, srv.toString(), cat.name, "JABAWS 1 Alignment Service", service); } jws2Discoverer.addService(jwsservers, svc); diff --git a/src/jalview/ws/jws2/JabawsAlignCalcWorker.java b/src/jalview/ws/jws2/JabawsAlignCalcWorker.java index 720e76a..baafc8a 100644 --- a/src/jalview/ws/jws2/JabawsAlignCalcWorker.java +++ b/src/jalview/ws/jws2/JabawsAlignCalcWorker.java @@ -17,614 +17,65 @@ */ package jalview.ws.jws2; -import jalview.analysis.AlignSeq; -import jalview.analysis.SeqsetUtils; import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; -import jalview.datamodel.AlignmentAnnotation; -import jalview.datamodel.AlignmentI; -import jalview.datamodel.Annotation; -import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; -import jalview.gui.IProgressIndicator; import jalview.workers.AlignCalcWorker; -import jalview.ws.jws2.dm.JabaWsParamSet; +import jalview.ws.jws2.dm.AAConSettings; import jalview.ws.jws2.jabaws2.Jws2Instance; import jalview.ws.params.WsParamSetI; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; import java.util.List; -import java.util.Map; import compbio.data.msa.SequenceAnnotation; -import compbio.data.sequence.FastaSequence; -import compbio.data.sequence.Score; -import compbio.data.sequence.ScoreManager; import compbio.metadata.Argument; -import compbio.metadata.ChunkHolder; -import compbio.metadata.JobStatus; -import compbio.metadata.JobSubmissionException; -import compbio.metadata.Option; -import compbio.metadata.ResultNotAvailableException; -import compbio.metadata.WrongParameterException; -public abstract class JabawsAlignCalcWorker extends AlignCalcWorker +public abstract class JabawsAlignCalcWorker extends JabawsCalcWorker { - Jws2Instance service; - - @SuppressWarnings("unchecked") - protected SequenceAnnotation aaservice; - - protected ScoreManager scoremanager; - - protected WsParamSetI preset; - - protected List arguments; public JabawsAlignCalcWorker(AlignViewportI alignViewport, AlignmentViewPanel alignPanel) { super(alignViewport, alignPanel); } - - IProgressIndicator guiProgress; - + + + + public JabawsAlignCalcWorker(Jws2Instance service, AlignFrame alignFrame, WsParamSetI preset, List paramset) { - this(alignFrame.getCurrentView(), alignFrame.alignPanel); - this.guiProgress = alignFrame; - this.preset = preset; - this.arguments = paramset; - this.service = service; - aaservice = (SequenceAnnotation) service.service; - - } - - public WsParamSetI getPreset() - { - return preset; - } - - public List getArguments() - { - return arguments; - } - - /** - * reconfigure and restart the AAConClient. This method will spawn a new - * thread that will wait until any current jobs are finished, modify the - * parameters and restart the conservation calculation with the new values. - * - * @param newpreset - * @param newarguments - */ - public void updateParameters(final WsParamSetI newpreset, - final List newarguments) - { - preset = newpreset; - arguments = newarguments; - calcMan.startWorker(this); - } - - public List