You can subscribe to this list here.
2013 |
Jan
|
Feb
|
Mar
|
Apr
(15) |
May
(10) |
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2014 |
Jan
(1) |
Feb
(1) |
Mar
(61) |
Apr
(52) |
May
(4) |
Jun
(5) |
Jul
(13) |
Aug
(11) |
Sep
(1) |
Oct
(1) |
Nov
(1) |
Dec
(1) |
2015 |
Jan
(7) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(3) |
Sep
(4) |
Oct
(2) |
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Till S. <til...@tu...> - 2014-04-17 13:02:12
|
Hi, it now seems to work for me. It is good to see, that you used a worker thread for the splitting and animated the work, because it can take some tome to create many subsets. Furthermore i liked that you used the DbExceptionHandler. However, there are still some things to fix before we can integrate the patch: - The parent of the new subset should be the subset that is spitted. - The split action should be accessible by right clicking on a subset (not only in the menu). - The action should be located int the same section as union / intersection / difference / filter. - ModelViewControler: The splitting should be implemented in the SubsetManager. The action should just call the method there (have a look at the other actions). - Good Coding Style: use two lines of code if you want to define and initialize two variable: int ringLevel = subsetDialog.getRingLevel(), index = 1; - Hint / Good Coding Style: you can use the Scaffolds.SubtreePreorderIterable to iterate over all scaffolds in a subtree (e.v. in your method getMolecules) Greetings Till Am Mittwoch, 16. April 2014, 21:08:42 schrieb Shamshad Alam: > Hi, > > Please, find the patch in attachment, apply and check it. > > Thanks > Shamshad > > > > On Wed, Apr 16, 2014 at 3:21 PM, Till Schäfer <til...@tu... > > wrote: > > > Hi, > > lets go back to mailing list communication ;). > > > > Am Mittwoch, 16. April 2014, 14:57:34 schrieb Shamshad Alam: > > > Hi, > > > > > > While working on this feature as you suggested I found that for a large > > > dataset there are more than a hundred scaffolds at a given ring level and > > > many of them contain a few (usually 1-10) molecules. So, after split up > > > hundred of subsets which merely contain a few molecules are created. It > > > makes Subset Manager Panel a little bit chaotic [Please refer to the > > image > > > attached to understand the situation well]. > > > > > The features purpose is to be able to handle dataset of very large size > > (i.e. about a million molecules). In this case one is not able to show all > > molecules in a view, because of performance limitations. Therefore the > > split is a way to handle the dataset step by step and it is a natural split > > by the structure of the molecules (at least for a chemist ;-) ). > > > > As the number of molecules on level 1 ore 2 does not increase that much, > > for larger datasets, this splitting makes sense for large datasets, but not > > for small ones. > > > > To conclude: It is totally fine, that you create so many small datasets. > > > > > > Regards, > > Till > > > > > Should I go ahead to and create a patch for this implementation? > > > > > > > > Or, we should include some further criteria such as subsets for only > > those > > > scaffolds which have more than n (a number specified by user) molecules > > are > > > created. > > > > > > Have you any other idea which makes this feature more usable? > > > > > > Thanks > > > Shamshad > > > > > > > > > On Tue, Apr 15, 2014 at 10:18 PM, Till Schäfer < > > > til...@tu...> wrote: > > > > > > > Hi, > > > > > > > > > > > > Am Dienstag, 15. April 2014, 21:30:29 schrieb Shamshad Alam: > > > > > Hi, > > > > > > > > > > Thanks for feedback, and sorry for misunderstanding. > > > > > > > > > > You mean that n subsets will be created if there are n scaffolds at > > ring > > > > > level x. In this case, it will be tedious task to enter name of the > > each > > > > > subset to be created. So, what naming convention should I use? I > > have an > > > > > idea: > > > > > > > > > > --> User will enter the name of the subset which will act as a > > prefix and > > > > > we will add suffix 1 for first subset, 2 for second subset..., and n > > for > > > > > nth subset, to the name for each subset to be created (You may get > > the > > > > > better picture of idea in the image attached) . > > > > Sounds good. The default name should be orientated towards the default > > > > name schema of filters and random subset creation. > > > > > > > > Something like: "Split(Level 3) - n" > > > > > > > > where n refers to the counter. > > > > > > > > Regards, > > > > Till > > > > > > > > > > > > > > --> Please tell me if you have any better idea regarding this. > > > > > > > > > > Thanks > > > > > Shamshad > > > > > > > > > > > > > > > On Tue, Apr 15, 2014 at 5:36 PM, Till Schäfer < > > > > til...@tu... > > > > > > wrote: > > > > > > > > > > > Hi, > > > > > > your patch just creates a single subset, where the top rings are > > > > filtered > > > > > > out. It does not SPLIT the subset. > > > > > > See section "misunderstanding" in my previous mail. > > > > > > > > > > > > Greetings, > > > > > > Till > > > > > > > > > > > > Am Montag, 14. April 2014, 09:10:46 schrieb Shamshad Alam: > > > > > > > Hi, > > > > > > > > > > > > > > I have made the changes you suggested. You can find patches in > > > > attached > > > > > > > file with this mail. > > > > > > > > > > > > > > Thanks > > > > > > > Shamshad > > > > > > > > > > > > > > > > > > > > > On Fri, Apr 11, 2014 at 9:58 PM, Till Schäfer < > > > > > > til...@tu... > > > > > > > > wrote: > > > > > > > > > > > > > > > Hi, > > > > > > > > thx for the patch. > > > > > > > > I just looked through the code and there was some > > misunderstanding > > > > > > > > regarding the task: > > > > > > > > - You selected the molecules of all scaffolds on ring level x > > and > > > > > > created > > > > > > > > a single subset from this. > > > > > > > > - The feature request 38 asked for something diferent: > > > > > > > > -> for each of the scaffolds on level x, select the molecules > > > > from the > > > > > > > > scaffold and his subtree and create a new subset. > > > > > > > > -> that means we will have n subsets if there are n scaffolds > > on > > > > > > level x. > > > > > > > > -> that means we partition the subset (minus the molecules > > from > > > > lower > > > > > > > > rings) > > > > > > > > > > > > > > > > The good message is, that your dialog seems to be reusable for > > this > > > > > > task. > > > > > > > > We just need to change the description. > > > > > > > > One small bug in the dialog: Only the visible rings are > > > > selectable, not > > > > > > > > the complete tree levels > > > > > > > > > > > > > > > > One further note: The action should be located in the subset > > menu > > > > and > > > > > > > > therefore should be implemented at the same place, where also > > the > > > > patch > > > > > > > > from najenson was imlemented (SubssetManager / SubsetActions). > > > > > > > > > > > > > > > > You can access the complete tree for a subset over > > > > > > DbManager.getScaffolds. > > > > > > > > Please wrap each of the DbManager calls in a DbExceptionHandler > > > > (you > > > > > > will > > > > > > > > find some examples in the SubsetManger). > > > > > > > > > > > > > > > > Regards, > > > > > > > > Till > > > > > > > > > > > > > > > > Am Mittwoch, 9. April 2014, 15:19:28 schrieb Shamshad Alam: > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > Feature Request #38 has been implemented, and you can find > > > > related > > > > > > > > patches > > > > > > > > > in attachment. > > > > > > > > > > > > > > > > > > When you will execute the application after applying > > patches, a > > > > tool > > > > > > bar > > > > > > > > > button (to make subset from ring) will appear at the right > > side > > > > of > > > > > > export > > > > > > > > > toolbar button. Follow that button to create a new subset at > > > > > > specified > > > > > > > > ring > > > > > > > > > level. > > > > > > > > > > > > > > > > > > Thanks > > > > > > > > > Shamshad > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > Dipl.-Inf. Till Schäfer > > > > > > > > TU Dortmund University > > > > > > > > Chair 11 - Algorithm Engineering > > > > > > > > Otto-Hahn-Str. 14 / Room 237 > > > > > > > > 44227 Dortmund, Germany > > > > > > > > > > > > > > > > e-mail: til...@cs... > > > > > > > > phone: +49(231)755-7706 > > > > > > > > fax: +49(231)755-7740 > > > > > > > > web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer > > > > > > > > pgp: > > > > > > > > > > > > > > > > > > > > https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Dipl.-Inf. Till Schäfer > > > > > > TU Dortmund University > > > > > > Chair 11 - Algorithm Engineering > > > > > > Otto-Hahn-Str. 14 / Room 237 > > > > > > 44227 Dortmund, Germany > > > > > > > > > > > > e-mail: til...@cs... > > > > > > phone: +49(231)755-7706 > > > > > > fax: +49(231)755-7740 > > > > > > web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer > > > > > > pgp: > > > > > > > > > > > > https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Dipl.-Inf. Till Schäfer > > > > TU Dortmund University > > > > Chair 11 - Algorithm Engineering > > > > Otto-Hahn-Str. 14 / Room 237 > > > > 44227 Dortmund, Germany > > > > > > > > e-mail: til...@cs... > > > > phone: +49(231)755-7706 > > > > fax: +49(231)755-7740 > > > > web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer > > > > pgp: > > > > > > https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 > > > > > > > > > > > > > > > > > > -- > > Dipl.-Inf. Till Schäfer > > TU Dortmund University > > Chair 11 - Algorithm Engineering > > Otto-Hahn-Str. 14 / Room 237 > > 44227 Dortmund, Germany > > > > e-mail: til...@cs... > > phone: +49(231)755-7706 > > fax: +49(231)755-7740 > > web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer > > pgp: > > https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 > > > > > > -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Andrew Z. <hot...@gm...> - 2014-04-17 09:42:04
|
-----Original Message----- From: "Anjenson" <hot...@gm...> Sent: 15/04/2014 21:00 To: "Till Schäfer" <til...@tu...> Subject: More Improvements for Random Subset Hi Till, I have noticed you fixed my bug about resetting background. In your fixes you used border, so I wanted to explain why I have chosen background: when resetting border to red numbers are aligned to new border and it's like weird animation. I also noticed that if I delete default text letter by letter NumberFormatException is thrown (when you're setting value variable. So I added changes that assume that field is empty while it is empty or it contains text. I attached the improvements. Hope they help. Regards, Andrew |
From: Till S. <til...@tu...> - 2014-04-16 09:51:58
|
Hi, lets go back to mailing list communication ;). Am Mittwoch, 16. April 2014, 14:57:34 schrieb Shamshad Alam: > Hi, > > While working on this feature as you suggested I found that for a large > dataset there are more than a hundred scaffolds at a given ring level and > many of them contain a few (usually 1-10) molecules. So, after split up > hundred of subsets which merely contain a few molecules are created. It > makes Subset Manager Panel a little bit chaotic [Please refer to the image > attached to understand the situation well]. > The features purpose is to be able to handle dataset of very large size (i.e. about a million molecules). In this case one is not able to show all molecules in a view, because of performance limitations. Therefore the split is a way to handle the dataset step by step and it is a natural split by the structure of the molecules (at least for a chemist ;-) ). As the number of molecules on level 1 ore 2 does not increase that much, for larger datasets, this splitting makes sense for large datasets, but not for small ones. To conclude: It is totally fine, that you create so many small datasets. Regards, Till > Should I go ahead to and create a patch for this implementation? > > Or, we should include some further criteria such as subsets for only those > scaffolds which have more than n (a number specified by user) molecules are > created. > > Have you any other idea which makes this feature more usable? > > Thanks > Shamshad > > > On Tue, Apr 15, 2014 at 10:18 PM, Till Schäfer < > til...@tu...> wrote: > > > Hi, > > > > > > Am Dienstag, 15. April 2014, 21:30:29 schrieb Shamshad Alam: > > > Hi, > > > > > > Thanks for feedback, and sorry for misunderstanding. > > > > > > You mean that n subsets will be created if there are n scaffolds at ring > > > level x. In this case, it will be tedious task to enter name of the each > > > subset to be created. So, what naming convention should I use? I have an > > > idea: > > > > > > --> User will enter the name of the subset which will act as a prefix and > > > we will add suffix 1 for first subset, 2 for second subset..., and n for > > > nth subset, to the name for each subset to be created (You may get the > > > better picture of idea in the image attached) . > > Sounds good. The default name should be orientated towards the default > > name schema of filters and random subset creation. > > > > Something like: "Split(Level 3) - n" > > > > where n refers to the counter. > > > > Regards, > > Till > > > > > > > > --> Please tell me if you have any better idea regarding this. > > > > > > Thanks > > > Shamshad > > > > > > > > > On Tue, Apr 15, 2014 at 5:36 PM, Till Schäfer < > > til...@tu... > > > > wrote: > > > > > > > Hi, > > > > your patch just creates a single subset, where the top rings are > > filtered > > > > out. It does not SPLIT the subset. > > > > See section "misunderstanding" in my previous mail. > > > > > > > > Greetings, > > > > Till > > > > > > > > Am Montag, 14. April 2014, 09:10:46 schrieb Shamshad Alam: > > > > > Hi, > > > > > > > > > > I have made the changes you suggested. You can find patches in > > attached > > > > > file with this mail. > > > > > > > > > > Thanks > > > > > Shamshad > > > > > > > > > > > > > > > On Fri, Apr 11, 2014 at 9:58 PM, Till Schäfer < > > > > til...@tu... > > > > > > wrote: > > > > > > > > > > > Hi, > > > > > > thx for the patch. > > > > > > I just looked through the code and there was some misunderstanding > > > > > > regarding the task: > > > > > > - You selected the molecules of all scaffolds on ring level x and > > > > created > > > > > > a single subset from this. > > > > > > - The feature request 38 asked for something diferent: > > > > > > -> for each of the scaffolds on level x, select the molecules > > from the > > > > > > scaffold and his subtree and create a new subset. > > > > > > -> that means we will have n subsets if there are n scaffolds on > > > > level x. > > > > > > -> that means we partition the subset (minus the molecules from > > lower > > > > > > rings) > > > > > > > > > > > > The good message is, that your dialog seems to be reusable for this > > > > task. > > > > > > We just need to change the description. > > > > > > One small bug in the dialog: Only the visible rings are > > selectable, not > > > > > > the complete tree levels > > > > > > > > > > > > One further note: The action should be located in the subset menu > > and > > > > > > therefore should be implemented at the same place, where also the > > patch > > > > > > from najenson was imlemented (SubssetManager / SubsetActions). > > > > > > > > > > > > You can access the complete tree for a subset over > > > > DbManager.getScaffolds. > > > > > > Please wrap each of the DbManager calls in a DbExceptionHandler > > (you > > > > will > > > > > > find some examples in the SubsetManger). > > > > > > > > > > > > Regards, > > > > > > Till > > > > > > > > > > > > Am Mittwoch, 9. April 2014, 15:19:28 schrieb Shamshad Alam: > > > > > > > Hi, > > > > > > > > > > > > > > Feature Request #38 has been implemented, and you can find > > related > > > > > > patches > > > > > > > in attachment. > > > > > > > > > > > > > > When you will execute the application after applying patches, a > > tool > > > > bar > > > > > > > button (to make subset from ring) will appear at the right side > > of > > > > export > > > > > > > toolbar button. Follow that button to create a new subset at > > > > specified > > > > > > ring > > > > > > > level. > > > > > > > > > > > > > > Thanks > > > > > > > Shamshad > > > > > > > > > > > > > > > > > > > > -- > > > > > > Dipl.-Inf. Till Schäfer > > > > > > TU Dortmund University > > > > > > Chair 11 - Algorithm Engineering > > > > > > Otto-Hahn-Str. 14 / Room 237 > > > > > > 44227 Dortmund, Germany > > > > > > > > > > > > e-mail: til...@cs... > > > > > > phone: +49(231)755-7706 > > > > > > fax: +49(231)755-7740 > > > > > > web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer > > > > > > pgp: > > > > > > > > > > > > https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Dipl.-Inf. Till Schäfer > > > > TU Dortmund University > > > > Chair 11 - Algorithm Engineering > > > > Otto-Hahn-Str. 14 / Room 237 > > > > 44227 Dortmund, Germany > > > > > > > > e-mail: til...@cs... > > > > phone: +49(231)755-7706 > > > > fax: +49(231)755-7740 > > > > web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer > > > > pgp: > > > > > > https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 > > > > > > > > > > > > > > > > > > -- > > Dipl.-Inf. Till Schäfer > > TU Dortmund University > > Chair 11 - Algorithm Engineering > > Otto-Hahn-Str. 14 / Room 237 > > 44227 Dortmund, Germany > > > > e-mail: til...@cs... > > phone: +49(231)755-7706 > > fax: +49(231)755-7740 > > web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer > > pgp: > > https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 > > > > > > -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Till S. <til...@tu...> - 2014-04-15 16:28:35
|
Hi, Am Dienstag, 15. April 2014, 17:18:59 schrieb Andrew Zhilka: > 15.04.2014 17:14, Till Schäfer пишет: > > Hi, > > > > Am Dienstag, 15. April 2014, 16:51:56 schrieb Andrew Zhilka: > > > >> All right, but should the opportunity to choose the property be included? > > That would be a nice additional feature, but it should be also possible to do a search all properties (this is the more important feature). > To prevent misunderstanding: in what way do you see it? Because I > thought that to allow searching for all features we input values for > each of them. But it seems to me that the way you see it is : we input > value and search in all properties for it. Am I right? Right. We want a fast search feature that is not the same as a filter. The user should NOT get all matching molecules in a new subset and the user should NOT get a filtered table view, which only shows the matching molecules. Instead we a looking for a feature like in libre/open office calc or firefox. The typical workflow is: - press ctrl + f or select quick search from menu - a panel on the bottom of the table pops up. It contains a text field to enter the text to search for, two buttons up and down to jump to the next and the previous match of the search term in the table and optionally a drop down box to specify the column in which we want to search (the default should be ALL columns). - pressing the next (previous) button or the key F3 (Shift +F3) lets the user jump through the table. That means, the table automatically scrolls to the position, where the search text is found. Additionally, the search text or the cell is highlighted in some way, that the user knows the exact location of the match. When you deal with the database level search method in the DbManager: have a look at the other methods implemented there and try to keep a common style. All checked exceptions that might occur must be wrapped in a DatabaseException. The database queries should be written in HQL language and not SQL, since this makes the query database independent (e.g. we can switch from mysql to hsqldb without adjusting our SQL queries). SQL should be used only in the case, if the performance of HQL is poor. However, i cannot imagine, that this is the case for your query. It is very important, that the DbManager methods are well documented, as they are accessed by "foreign code". DbManager methods, that are accessed inside the GUI must be wrapped in a DbExceptionHandler, to give the user a uniform experience in the case of dabase errors (such as a connection loss). Be aware of the fact, that not all columns in the table view are properties (especially the SMILES). That means you have to mix the Database search results on the properties with your client based search for the smiles (which is a fixed attribute of the Molecule object). Than you need to order the search results (by their table position) and map them to a scroll pane position. The search itself should be non-blocking for the GUI, that means you need to do this calculation in a separate thread, and use a listener to get notified about the "search finished" event. => This is more work than i expect you to do in advance of the GSOC project. I am glad to see somebody implementing this, but i would also understand if you skip this and go on with another bug. Regards, Till -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Andrew Z. <hot...@gm...> - 2014-04-15 14:19:09
|
15.04.2014 17:14, Till Schäfer пишет: > Hi, > > Am Dienstag, 15. April 2014, 16:51:56 schrieb Andrew Zhilka: > >> All right, but should the opportunity to choose the property be included? > That would be a nice additional feature, but it should be also possible to do a search all properties (this is the more important feature). To prevent misunderstanding: in what way do you see it? Because I thought that to allow searching for all features we input values for each of them. But it seems to me that the way you see it is : we input value and search in all properties for it. Am I right? > Regards, > Till Regards, Andrew "Anjenson" Zhilka |
From: Till S. <til...@tu...> - 2014-04-15 14:14:35
|
Hi, Am Dienstag, 15. April 2014, 16:51:56 schrieb Andrew Zhilka: > 15.04.2014 15:38, Till Schäfer пишет: > >> So I > >> turned to FilterDialog to understand how it is constructed. But it > >> appeared to be so rich with functionality so that I would like to know > >> if I could reuse the FilterDialog for the searching. > > We did not think of a dialog. There should be a feature such like in firefox when pressing ctrl+f. That means we will have a small text field on the bottom of the table an we are able to jump from one match to the next. > All right, but should the opportunity to choose the property be included? That would be a nice additional feature, but it should be also possible to do a search all properties (this is the more important feature). Regards, Till -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Andrew Z. <hot...@gm...> - 2014-04-15 13:52:09
|
15.04.2014 15:38, Till Schäfer пишет: >> So I >> turned to FilterDialog to understand how it is constructed. But it >> appeared to be so rich with functionality so that I would like to know >> if I could reuse the FilterDialog for the searching. > We did not think of a dialog. There should be a feature such like in firefox when pressing ctrl+f. That means we will have a small text field on the bottom of the table an we are able to jump from one match to the next. All right, but should the opportunity to choose the property be included? Regards, Andrew "Anjenson" Zhilka |
From: Till S. <til...@tu...> - 2014-04-15 12:38:37
|
Hi, Am Montag, 14. April 2014, 22:43:31 schrieb Anjenson: > Hi Till, > > I have been trying to implement search feature > <http://sourceforge.net/p/scaffoldhunter/feature-requests/40/>. This is a tough feature request. It involves writing a database search method, because the properties to search are lazy loaded and therefore not available in the client application. That means you have to deal with our hibernate abstraction layer. I suggest to implement another feature such as: - http://sourceforge.net/p/scaffoldhunter/bug-reports/24/ - https://sourceforge.net/p/scaffoldhunter/feature-requests/16/ - https://sourceforge.net/p/scaffoldhunter/feature-requests/21/ -> fixing some raw type warnings > So I > turned to FilterDialog to understand how it is constructed. But it > appeared to be so rich with functionality so that I would like to know > if I could reuse the FilterDialog for the searching. We did not think of a dialog. There should be a feature such like in firefox when pressing ctrl+f. That means we will have a small text field on the bottom of the table an we are able to jump from one match to the next. Greetings, Till > It seems to be easy > as this dialog already provides calculation of the number of molecules > responding to the filter. We can also put all the results to separate > Selection and add scrolling similar to "Scroll to first selected" to > move from result to result. > > The only problem is adding title as the parameter of searching. However, > I think we can modify Filter so that title could be added to properties. > Still I am very much not sure as I can't find the point where Filterset > is applied. > > So, I would be grateful if you could explain this process. > > Regards, > Andrew "Anjenson" Zhilka -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Till S. <til...@tu...> - 2014-04-15 12:06:53
|
Hi, your patch just creates a single subset, where the top rings are filtered out. It does not SPLIT the subset. See section "misunderstanding" in my previous mail. Greetings, Till Am Montag, 14. April 2014, 09:10:46 schrieb Shamshad Alam: > Hi, > > I have made the changes you suggested. You can find patches in attached > file with this mail. > > Thanks > Shamshad > > > On Fri, Apr 11, 2014 at 9:58 PM, Till Schäfer <til...@tu... > > wrote: > > > Hi, > > thx for the patch. > > I just looked through the code and there was some misunderstanding > > regarding the task: > > - You selected the molecules of all scaffolds on ring level x and created > > a single subset from this. > > - The feature request 38 asked for something diferent: > > -> for each of the scaffolds on level x, select the molecules from the > > scaffold and his subtree and create a new subset. > > -> that means we will have n subsets if there are n scaffolds on level x. > > -> that means we partition the subset (minus the molecules from lower > > rings) > > > > The good message is, that your dialog seems to be reusable for this task. > > We just need to change the description. > > One small bug in the dialog: Only the visible rings are selectable, not > > the complete tree levels > > > > One further note: The action should be located in the subset menu and > > therefore should be implemented at the same place, where also the patch > > from najenson was imlemented (SubssetManager / SubsetActions). > > > > You can access the complete tree for a subset over DbManager.getScaffolds. > > Please wrap each of the DbManager calls in a DbExceptionHandler (you will > > find some examples in the SubsetManger). > > > > Regards, > > Till > > > > Am Mittwoch, 9. April 2014, 15:19:28 schrieb Shamshad Alam: > > > Hi, > > > > > > Feature Request #38 has been implemented, and you can find related > > patches > > > in attachment. > > > > > > When you will execute the application after applying patches, a tool bar > > > button (to make subset from ring) will appear at the right side of export > > > toolbar button. Follow that button to create a new subset at specified > > ring > > > level. > > > > > > Thanks > > > Shamshad > > > > > > > > -- > > Dipl.-Inf. Till Schäfer > > TU Dortmund University > > Chair 11 - Algorithm Engineering > > Otto-Hahn-Str. 14 / Room 237 > > 44227 Dortmund, Germany > > > > e-mail: til...@cs... > > phone: +49(231)755-7706 > > fax: +49(231)755-7740 > > web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer > > pgp: > > https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 > > > > > > -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Anjenson <hot...@gm...> - 2014-04-14 19:43:38
|
Hi Till, I have been trying to implement search feature <http://sourceforge.net/p/scaffoldhunter/feature-requests/40/>. So I turned to FilterDialog to understand how it is constructed. But it appeared to be so rich with functionality so that I would like to know if I could reuse the FilterDialog for the searching. It seems to be easy as this dialog already provides calculation of the number of molecules responding to the filter. We can also put all the results to separate Selection and add scrolling similar to "Scroll to first selected" to move from result to result. The only problem is adding title as the parameter of searching. However, I think we can modify Filter so that title could be added to properties. Still I am very much not sure as I can't find the point where Filterset is applied. So, I would be grateful if you could explain this process. Regards, Andrew "Anjenson" Zhilka |
From: Till S. <til...@tu...> - 2014-04-11 16:28:41
|
Hi, thx for the patch. I just looked through the code and there was some misunderstanding regarding the task: - You selected the molecules of all scaffolds on ring level x and created a single subset from this. - The feature request 38 asked for something diferent: -> for each of the scaffolds on level x, select the molecules from the scaffold and his subtree and create a new subset. -> that means we will have n subsets if there are n scaffolds on level x. -> that means we partition the subset (minus the molecules from lower rings) The good message is, that your dialog seems to be reusable for this task. We just need to change the description. One small bug in the dialog: Only the visible rings are selectable, not the complete tree levels One further note: The action should be located in the subset menu and therefore should be implemented at the same place, where also the patch from najenson was imlemented (SubssetManager / SubsetActions). You can access the complete tree for a subset over DbManager.getScaffolds. Please wrap each of the DbManager calls in a DbExceptionHandler (you will find some examples in the SubsetManger). Regards, Till Am Mittwoch, 9. April 2014, 15:19:28 schrieb Shamshad Alam: > Hi, > > Feature Request #38 has been implemented, and you can find related patches > in attachment. > > When you will execute the application after applying patches, a tool bar > button (to make subset from ring) will appear at the right side of export > toolbar button. Follow that button to create a new subset at specified ring > level. > > Thanks > Shamshad > > -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Till S. <til...@tu...> - 2014-04-11 15:56:59
|
Hi, it is possible without manipulating the data. you can just pass the set of selected molecules to the constructor of the comparator. in the compare method you just check if the item is in the set. If only one item is in the set, you return that the item is lower in the ordering, otherwise you compare the values. Normally the translation from values to positions should also be handled by a map from object to posiotion (which should also be a member of the comparator). Regards, Till Am Dienstag, 8. April 2014, 16:48:37 schrieb Shamshad Alam: > Hi Anjenson, > > It might be possible. Before each comparison for sorting getValueAt() of > ModelWrapper is called. In this method we are determining that values of > the column are loaded or not, and if not then we perform lazy loading, > based on the column index we have in the method. > > Since we also have row index in the method getValueAt(), we can determine > the state of row in table. We can return an object, which has both its > state information (a boolean field) and its value, from method > getValueAt(). In compare() method of Comparator now we have both state and > value. It seems manipulation of sortie class is not required. We may do it > by just modifying getValueAt() of ModelWrapper, getComparator() of > TableViewRowSorter and compare() of MyComparator. > > Regards, > Shamshad -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Till S. <til...@tu...> - 2014-04-11 15:41:17
|
Hi, Am Dienstag, 8. April 2014, 20:27:14 schrieb Shamshad Alam: > Hi, > > I am trying to implement feature request #38 - split subsets by scaffold on > a specified level. > > Suggest me what I should use - > > (1) A dialog box that has a combobox to select ring level, a text field to > specify subset name, and create and cancel button. This dialog box will be > accessible from menubar and toolbar. As it is a subset action it should go to the subsetmenu and to the context menu of a subset. > (2) A panel (like Minimap) that will appear in left side and it has same > control (i.e. a combobox to select ring level, a text field to specify > subset name, and a create button), Or > > (3) Any other possible option? The general work flow should be to select a subset and then chose "split by ring". A small dialog to enter the ring number n should pop up. Afterward several subsets should be created (One subset for each scaffold on ring level n). Regards, Till > > Thanks > Shamshad > > -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Till S. <til...@tu...> - 2014-04-11 15:34:21
|
Hi, i applied the patch with some modifications [1]. It now respects ModelViewController and checks for empty subsets. [1] http://sourceforge.net/p/scaffoldhunter/code/2179/ THX for the contribution. Regards, Till Am Donnerstag, 10. April 2014, 22:04:22 schrieb Anjenson: > Hi Till, > > I have added suggested features, that you can find in attached patch-file. > So, the review needed. > > Regards, > Andrew "Anjenson" Zhilka -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Anjenson <hot...@gm...> - 2014-04-10 19:04:31
|
Hi Till, I have added suggested features, that you can find in attached patch-file. So, the review needed. Regards, Andrew "Anjenson" Zhilka |
From: Till S. <til...@tu...> - 2014-04-08 15:00:43
|
Hi, Am Montag 07 April 2014, 21:16:50 schrieb Anjenson: > > On 04/07/2014 06:20 PM, Till Schäfer wrote: > > One further suggestion (i do not expect you to do this, but if you have fun to do so this would make the dialog perfect for me :-) ): > > I just noticed, that you also check the size of the parent subset. This is a nice feature. A small problem that remains, is the the user might be unaware about the cause of the disabled ok button. We should indicate the cause in some way. The easiest would be to show a message like "value to large" or "cannot create a subset with a size larger than than the parent subset size". The problem is, that we have a some of empty space (if no message ist shown) or the dialog changes the size. An alternative would be to show a tool tip over text field that explains the error, but the user might miss the tool tip. We can also show small info icon (behind the text field / if the size error occurs) that shows the error message as tool tip and surround the text field with a red line like in the "new user dialog". What do you think is the best solution? > I think that a good solution would be pointing maximum size of the > subset in label next to the text field > ( something like [text_field ] / max_size ) > > and combining this with red border in case user still inputs too big > size will be good. I also like the idea about the tool tip and I think > this may be good as well. sounds good. Regards Till > > Just one more thing. As Shamshad is also working on features it would be > great if you could post some more of them. Or should we look for them on > our own? > > Regards, > Andrew "Anjenson" Zhilka -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Shamshad A. <sha...@gm...> - 2014-04-08 14:57:20
|
Hi, I am trying to implement feature request #38 - split subsets by scaffold on a specified level. Suggest me what I should use - (1) A dialog box that has a combobox to select ring level, a text field to specify subset name, and create and cancel button. This dialog box will be accessible from menubar and toolbar. (2) A panel (like Minimap) that will appear in left side and it has same control (i.e. a combobox to select ring level, a text field to specify subset name, and a create button), Or (3) Any other possible option? Thanks Shamshad -- -Shamshad Alam +91 9911631198 LinkedIn : in.linkedin.com/pub/shamshad-alam/58/939/70 GitHub: @shamshad-npti Facbook: @shamshad.saralindia |
From: Shamshad A. <sha...@gm...> - 2014-04-08 11:18:43
|
Hi Anjenson, It might be possible. Before each comparison for sorting getValueAt() of ModelWrapper is called. In this method we are determining that values of the column are loaded or not, and if not then we perform lazy loading, based on the column index we have in the method. Since we also have row index in the method getValueAt(), we can determine the state of row in table. We can return an object, which has both its state information (a boolean field) and its value, from method getValueAt(). In compare() method of Comparator now we have both state and value. It seems manipulation of sortie class is not required. We may do it by just modifying getValueAt() of ModelWrapper, getComparator() of TableViewRowSorter and compare() of MyComparator. Regards, Shamshad |
From: Anjenson <hot...@gm...> - 2014-04-08 10:19:44
|
Hi Shamshad, I have been thinking about how to implement this feature as well, so I had an idea of creating some kind of function that will calculate new index for selected items. This index will be returned when asking for the row of molecule and used when asking for the value in the row. Because as I understand it may take resorting all the dataset when selecting item after the table had been loaded. I suppose it can be done by manipulating with mappings field in Sortie class (however, I am very much not sure I understand the the purpose of this field correctly) or creating additional one. Regards, Andrew "Anjenson" Zhilka On 04/07/2014 08:33 PM, Shamshad Alam wrote: > Hi, > > Sorry, I tried first to solve it by implementing comparator. But it > could not be feasible for me because parameters passed in compare() > method of comparator are the two values to be compared instead of row > index (row index is required to determine a row is selected or not). > So, we have no idea about values we have in compare() method that they > belong to selected or unselected row. > > Currently my aim is to get to know how the entire system is working > and familiarize myself with the coding style and architecture of > Scaffold Hunter. So, should I try other features request such as '#38 > Split subsets by scaffolds on a specified level'? > > Actually I have not made efforts to develop such messy codes. I > created a copy of DefaultRowSorter and TableRowSorter implementation > available in java swing and added single method (sort(int[] > selectedRows)) in DefaultRowSorter (You can see the changes in > attachment. It is quite simple). > > > Thanks > Shamshad |
From: Anjenson <hot...@gm...> - 2014-04-07 18:17:01
|
On 04/07/2014 06:20 PM, Till Schäfer wrote: > One further suggestion (i do not expect you to do this, but if you have fun to do so this would make the dialog perfect for me :-) ): > I just noticed, that you also check the size of the parent subset. This is a nice feature. A small problem that remains, is the the user might be unaware about the cause of the disabled ok button. We should indicate the cause in some way. The easiest would be to show a message like "value to large" or "cannot create a subset with a size larger than than the parent subset size". The problem is, that we have a some of empty space (if no message ist shown) or the dialog changes the size. An alternative would be to show a tool tip over text field that explains the error, but the user might miss the tool tip. We can also show small info icon (behind the text field / if the size error occurs) that shows the error message as tool tip and surround the text field with a red line like in the "new user dialog". What do you think is the best solution? I think that a good solution would be pointing maximum size of the subset in label next to the text field ( something like [text_field ] / max_size ) and combining this with red border in case user still inputs too big size will be good. I also like the idea about the tool tip and I think this may be good as well. Just one more thing. As Shamshad is also working on features it would be great if you could post some more of them. Or should we look for them on our own? Regards, Andrew "Anjenson" Zhilka |
From: Shamshad A. <sha...@gm...> - 2014-04-07 17:33:50
|
--Method Modified in copy of DefaultRowSorter available java swing library-- sort() : replaced Arrays.sort(viewToModel) with sort(table.getSelectedRows()); sortExistingData() : again replaced Arrays.sort(viewToModel) with sort(table.getSelectedRows()); //--Method Added private void sort(int[] selected) { if (selected.length != 0) { Row[] selectedRows = new Row[selected.length]; Row[] remaining = new Row[viewToModel.length - selected.length]; int k = 0; int lastSelectedIndex = selected[selected.length - 1]; for (int i = 0, j = 0; i <= lastSelectedIndex; i++) { if (selected[j] == i) { selectedRows[j++] = viewToModel[i]; } else { remaining[k++] = viewToModel[i]; } } System.arraycopy(viewToModel, lastSelectedIndex + 1, remaining, k, viewToModel.length - lastSelectedIndex - 1); Arrays.sort(selectedRows); Arrays.sort(remaining); System.arraycopy(selectedRows, 0, viewToModel, 0, selectedRows.length); System.arraycopy(remaining, 0, viewToModel, selectedRows.length, remaining.length); } else { Arrays.sort(viewToModel); } } --Everything else is a copy of DefaultRowSorter and TableRowSorter implementation available in java swing-- |
From: Till S. <til...@tu...> - 2014-04-07 15:24:14
|
Hi, lets keep the open source spirit and discuss this over the devel mailing list ;-) Am Montag, 7. April 2014, 17:19:42 schrieb Andrew Zhilka: > Hi Till, > > The new-size field already accepts only numbers but I will also add a label. I meant something different. Currently it is possible to type non numeric letters, but the ok button is only active if the text field contains a number. However it is also possible to restrict the text field in such a way, that pressing a non-numerical char results in no change of the text field. One further suggestion (i do not expect you to do this, but if you have fun to do so this would make the dialog perfect for me :-) ): I just noticed, that you also check the size of the parent subset. This is a nice feature. A small problem that remains, is the the user might be unaware about the cause of the disabled ok button. We should indicate the cause in some way. The easiest would be to show a message like "value to large" or "cannot create a subset with a size larger than than the parent subset size". The problem is, that we have a some of empty space (if no message ist shown) or the dialog changes the size. An alternative would be to show a tool tip over text field that explains the error, but the user might miss the tool tip. We can also show small info icon (behind the text field / if the size error occurs) that shows the error message as tool tip and surround the text field with a red line like in the "new user dialog". What do you think is the best solution? > Thanks for letting me know about SwapArrayList, I shall make use of it.;) Thank you, too. Greetings Till > > Regards, > Andrew "Anjenson" Zhilka > > -----Original Message----- > From: "Till Schäfer" <til...@tu...> > Sent: 07/04/2014 14:32 > To: "hot...@gm..." <hot...@gm...> > Cc: "sca...@li..." <sca...@li...> > Subject: Re: Fwd: Re: Random Subset Patch File version 2 > > Hi Andrew, > thank a lot for submitting the patch! As you may have noticed, nils already committed it in the trunk. I have looked through the code / usability and have two further suggestions: > > 1. Performance: > The current implementation has a quadratic runtime behavior. The single operations are fast, but it can take some seconds for a larger dataset. This is caused by the removal from the ArrayList which takes O(n) / linear time in the worst and average case. You can avoid this overhead by swapping the element which should be removed with the last element in the list and remove the last element afterwards (since you do not depend on the ordering of the list). For this purpose i already implemented a SwappingArrayList and i just committed it to the trunk (see the util package). That means you can just call the swapAndRemove method. > > 2. The user interface: > In my opinion we should not use two dialogs that pop up after each other. Two dialogs do fragment the workflow. Furthermore, i can not read the complete title of the window in my window manager as there is not enough space. Therefore, the purpose of the text field has to be guessed (there are also window managers out there with no title at all ;) ). > -> We should create a label in front of text field that explains the dialog (something like: "please enter the size of the random subset"). I know the already implemented rename dialog was not the best example here ;) > -> we should remove the second dialog and integrate the naming directly in the first dialog OR just create the subset with a fixed name (the user can rename it afterwards if the name does not fit. together with the below suggestion about the default naming, this seem a solutions that is not less usable than the first one / you can decide here) > -> the size field should only accept numbers (we do not need the explanation in the field anymore if we have a label) > -> we should give a more meaningful default name: e.g.: random(parent name, size). That means the user can directly see that this subset is created randomly from parent subset with a specific size). > > This were more suggestions than i intended at the beginning of this mail ;-) Nevertheless, this are the usual things that come up after patch submission. > > Greetings > Till > > Am Montag, 7. April 2014, 11:53:51 schrieb Nils Kriege: > > > > ---------- Forwarded Message ---------- > > > > Subject: Re: Random Subset Patch File version 2 > > Date: Monday 07 April 2014, 10:40:02 > > From: Nils Kriege <nil...@tu...> > > To: Anjenson <hot...@gm...> > > > > Hi Andrew, > > > > thank you for your work on this feature. Your code looks fine and I have > > comitted it to the repository. > > > > > > Thanks! > > Nils > > > > On Friday 04 April 2014 20:02:05 Anjenson wrote: > > > Hi Nils, > > > > > > Sending you fixed version. > > > > > > Regards, > > > Andrew > > ----------------------------------------- > -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Till S. <til...@tu...> - 2014-04-07 14:37:51
|
Hi Shamshad, first of all i have to say sorry for the mess in the table view. I have looked through the code and many things are implemented in a non-standard way. Therefore, it is not easy to add the new functionality here. I did not expect this bug to be so messy, otherwise we would not have proposed to fix it on the mailing list. Normally one should just use the TableRowSorter and add a comparator that handles the sorting. The TableView is using a custom TableViewRowSorter, instead. To apply a sorting, that is not based on the values of the model (they are lazy loaded and therefore not available all the time) it creates a wrapper around the model that replaces the values with the sorting values (which are calculated by the database). Regarding your patch: Although it might work, there are some things that need to be fixed before we can apply it. 1. Usage: There should be an option to toggle the behavior between "selection first" and "selection has no influence" 2. Code Structure: - It is a no go to re-implement the TableRowSorter and DefaultRowSorter and apply a different ordering there. The best practice would be to overload a comparator (see above). and fix the current ugly implementation in the TableRowSorter, which replaces the sort values. Since we do not expect this depth of changes from you, it would also be fine if you just add a comparator, that only handles the selection case, and keep the value replacing code for the normal sorting. - System.out.println should be removed (there is some debug output) Greetings Till Am Montag, 7. April 2014, 12:07:30 schrieb Shamshad Alam: > Hi Sir, > > "Feature Request #41 : Table View Sort by Selection" has been implemented. > Find patches attached with mail. > > I have tested it on small dataset which consists of just 602 molecules and > I found no any performance issue. > > There might be performance issue because two lists, one for selected rows > and other for unselected rows, are sorted separately and thereafter both > are merged together. > > Could you provide a database which have relatively large number of > molecules? It will help me to assess the performance of whatever I > implement. > > > Thanks > Shamshad > > -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Till S. <til...@tu...> - 2014-04-07 10:32:26
|
Hi Andrew, thank a lot for submitting the patch! As you may have noticed, nils already committed it in the trunk. I have looked through the code / usability and have two further suggestions: 1. Performance: The current implementation has a quadratic runtime behavior. The single operations are fast, but it can take some seconds for a larger dataset. This is caused by the removal from the ArrayList which takes O(n) / linear time in the worst and average case. You can avoid this overhead by swapping the element which should be removed with the last element in the list and remove the last element afterwards (since you do not depend on the ordering of the list). For this purpose i already implemented a SwappingArrayList and i just committed it to the trunk (see the util package). That means you can just call the swapAndRemove method. 2. The user interface: In my opinion we should not use two dialogs that pop up after each other. Two dialogs do fragment the workflow. Furthermore, i can not read the complete title of the window in my window manager as there is not enough space. Therefore, the purpose of the text field has to be guessed (there are also window managers out there with no title at all ;) ). -> We should create a label in front of text field that explains the dialog (something like: "please enter the size of the random subset"). I know the already implemented rename dialog was not the best example here ;) -> we should remove the second dialog and integrate the naming directly in the first dialog OR just create the subset with a fixed name (the user can rename it afterwards if the name does not fit. together with the below suggestion about the default naming, this seem a solutions that is not less usable than the first one / you can decide here) -> the size field should only accept numbers (we do not need the explanation in the field anymore if we have a label) -> we should give a more meaningful default name: e.g.: random(parent name, size). That means the user can directly see that this subset is created randomly from parent subset with a specific size). This were more suggestions than i intended at the beginning of this mail ;-) Nevertheless, this are the usual things that come up after patch submission. Greetings Till Am Montag, 7. April 2014, 11:53:51 schrieb Nils Kriege: > > ---------- Forwarded Message ---------- > > Subject: Re: Random Subset Patch File version 2 > Date: Monday 07 April 2014, 10:40:02 > From: Nils Kriege <nil...@tu...> > To: Anjenson <hot...@gm...> > > Hi Andrew, > > thank you for your work on this feature. Your code looks fine and I have > comitted it to the repository. > > > Thanks! > Nils > > On Friday 04 April 2014 20:02:05 Anjenson wrote: > > Hi Nils, > > > > Sending you fixed version. > > > > Regards, > > Andrew > ----------------------------------------- -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |
From: Till S. <til...@tu...> - 2014-04-01 16:47:29
|
Hi, have a look in the JTable specifications and try to figure out how a TableRowSorter is working. You do not need to implement the sorting yourself. The ordering is specified by a Comparator. Greetings Till Am Dienstag, 1. April 2014, 21:52:11 schrieb Shamshad Alam: > Hi, > > Today, I have tried to add this feature, but I do not found any concrete > method implementation which support this feature. > > After a couple of hours of work, I found that there are two possible ways: > First way - return null for all selected rows from > ModelWrapper.getValueAt(rowIndex, columnIndex). If we do so all the > selected row will appear together at top in ascending order sorting and at > the bottom in descending order sorting. > > Second way - TableRowSorter extends javax.swing.DefaultRowSorter in which > implementation of method sort() is available, But there is no way to > extends the functionality of sort() method by overriding it. One option yet > available is to create a copy of DefaultRowSorter and implement sort method > in such a way that it will sort selected and unselected rows separately > then merge both together. > > I have done first workaround and it is working but has certain limitation > such as performance and selected rows are not get sorted, That is why, I > think second workaround is better. > > Should I try second option? > > > Hi, > > sorry for the late answer. Some of us had a deadline on Monday, which > > distracted us a bit from answering questions. > > > > To understand the current behavior of the table sorting i have to explain > > lazy loading of properties first: > > > > To avoid unnecessary memory consumption we are not holding all properties > > of all molecules in memory. Only the needed properties are loaded on demand > > (this done by DbManager.lockAndLoad and DbManager.unlockAndUnload). Sorting > > the Table would therefore require to load the sort-property completely (for > > all molecules of the current subset) into the ram. As this is still not > > very efficient. We have a DbManager method getSortOrder, that calculates > > the sort order on the database level and returns this sort order only. > > > > You can start with the TableViewRowSorter class as an entry point. Please > > note, that the table view does not use a very clean code structure. This is > > the darker side of SH regarding the code quality ;-) . > > > > Greetings > > Till > > > > Am Samstag, 29. März 2014, 21:45:28 schrieb Anjenson: > > > Hi, > > > > > > I also would like to know where to find methods that apply different > > > types of sorting to table when we press buttons in table header (eg. > > > "Title" or any other property). I think I will need to reimplement > > > sorting a little to provide stability after rows reordering. > > > > > > Regards, > > > Andrew > > > > > > > > ------------------------------------------------------------------------------ > > > _______________________________________________ > > > Scaffoldhunter-devel mailing list > > > Sca...@li... > > > https://lists.sourceforge.net/lists/listinfo/scaffoldhunter-devel > > -- > > Dipl.-Inf. Till Schäfer > > TU Dortmund University > > Chair 11 - Algorithm Engineering > > Otto-Hahn-Str. 14 / Room 237 > > 44227 Dortmund, Germany > > > > e-mail: til...@cs... > > phone: +49(231)755-7706 > > fax: +49(231)755-7740 > > web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer > > pgp: > > https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 > > > > > > ------------------------------------------------------------------------------ > > _______________________________________________ > > Scaffoldhunter-devel mailing list > > Sca...@li... > > https://lists.sourceforge.net/lists/listinfo/scaffoldhunter-devel > > > > > > -- Dipl.-Inf. Till Schäfer TU Dortmund University Chair 11 - Algorithm Engineering Otto-Hahn-Str. 14 / Room 237 44227 Dortmund, Germany e-mail: til...@cs... phone: +49(231)755-7706 fax: +49(231)755-7740 web: http://ls11-www.cs.uni-dortmund.de/staff/schaefer pgp: https://keyserver2.pgp.com/vkd/SubmitSearch.event?&&SearchCriteria=0xD84DED79 |