Changeset 4540


Ignore:
Timestamp:
Jan 8, 2014, 10:48:49 AM (5 years ago)
Author:
fredrik
Message:

Refs #819, Refs #821. Clearing cluster IDs before matching. Fix when multiple hits with same FDR but different e-values.

Location:
trunk
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/client/servlet/src/org/proteios/action/ActionFactory.java

    r4421 r4540  
    4848import org.proteios.action.hit.ViewHit;
    4949import org.proteios.action.hit.ViewHitExternalId;
     50import org.proteios.action.hit.ViewHitFeature;
    5051import org.proteios.action.hit.ViewHitPDBFile;
    5152import org.proteios.action.hit.ViewHitSearchResultFile;
     
    683684                link = getActionLink(ViewHitSubHits.class, label);
    684685            }
     686            else if (key.equals("PrecursorQuantity"))
     687            {
     688                link = getActionLink(ViewHitFeature.class, label);
     689            }
    685690            else if (key.equals("Protein"))
    686691            {
  • trunk/plugin/src/org/proteios/plugins/ClearFeatures.java

    r4310 r4540  
    7676        {
    7777                return new AboutImpl("Clear Features", "Clear features in project",
    78                         "0.1", "2012, Fredrik Levander", null, null,
     78                        "0.2", "2012-2014, Fredrik Levander", null, null,
    7979                        "http://www.proteios.org");
    8080        }
     
    118118                                int updatedFeatures = removeFeatureSequences(project, dc);
    119119                                dc.commit();
     120                                int deletedIds = clearClusterIds(project,sc);
    120121                                response
    121                                         .setDone(updatedFeatures + " feature sequences removed. " + updatedHits + " hits updated. " + removedAligned + " aligned hits deleted.");
     122                                        .setDone(updatedFeatures + " feature sequences removed. " + updatedHits + " hits updated. " + removedAligned + " aligned hits deleted. " + deletedIds + " cluster IDs removed.");
    122123                        }
    123124                        else
     
    146147                QueryFactory qf = new QueryFactory();
    147148                ItemQuery<Hit> hitQuery = qf.select(Hit.class);
    148                 hitQuery.restrictPermanent(Restrictions.eq(Hql.property("project"), Hql
    149                         .entity(project)));
     149                hitQuery.restrictPermanent(Restrictions.eq(Hql.property("project"),
     150                        Hql.entity(project)));
    150151                hitQuery.restrictPermanent(Restrictions.eq(Hql.property("scoreType"),
    151152                        Expressions.string("Proteios aligned")));
     
    176177                QueryFactory qf = new QueryFactory();
    177178                ItemQuery<Hit> hitQuery = qf.select(Hit.class);
    178                 hitQuery.restrictPermanent(Restrictions.eq(Hql.property("project"), Hql
    179                         .entity(project)));
    180                 hitQuery.restrictPermanent(Restrictions.neq(Hql
    181                         .property("precursorQuantity"), null));
     179                hitQuery.restrictPermanent(Restrictions.eq(Hql.property("project"),
     180                        Hql.entity(project)));
     181                hitQuery.restrictPermanent(Restrictions.neq(
     182                        Hql.property("precursorQuantity"), null));
    182183                for (Iterator<Hit> iter = hitQuery.iterate(dc); iter.hasNext();)
    183184                {
     
    189190                }
    190191                hitQuery = qf.select(Hit.class);
    191                 hitQuery.restrictPermanent(Restrictions.eq(Hql.property("project"), Hql
    192                         .entity(project)));
    193                 hitQuery.restrictPermanent(Restrictions.eq(Hql
    194                         .property("precursorQuantity"), null));
     192                hitQuery.restrictPermanent(Restrictions.eq(Hql.property("project"),
     193                        Hql.entity(project)));
     194                hitQuery.restrictPermanent(Restrictions.eq(
     195                        Hql.property("precursorQuantity"), null));
    195196                hitQuery.restrictPermanent(Restrictions.neq(Hql.property("feature"),
    196197                        null));
     
    216217                QueryFactory qf = new QueryFactory();
    217218                ItemQuery<Feature> query = qf.select(Feature.class);
    218                 query.restrictPermanent(Restrictions.eq(Hql.property("project"), Hql
    219                         .entity(project)));
     219                query.restrictPermanent(Restrictions.eq(Hql.property("project"),
     220                        Hql.entity(project)));
    220221                query.restrict(Restrictions.neq(Hql.property("peptideSequence"), null));
    221222                for (Iterator<Feature> iter = query.iterate(dc); iter.hasNext();)
     
    247248                for (File msFile : files)
    248249                {
    249                         log
    250                                 .debug("Deleting features for file " + (++count) + " of " + nFiles);
     250                        log.debug("Deleting features for file " + (++count) + " of " + nFiles);
    251251                        nDeleted += Feature.deleteAllFeatures(project, msFile, sessc);
    252252                }
     
    254254                return nDeleted;
    255255        }
     256
     257
     258        /**
     259         * Delete all cluster Ids for features in project. This is performed for one msFile at
     260         * the time to avoid stalling. The deletions are committed to the database
     261         * after each batch delete.
     262         *
     263         * @return the number of deleted rows
     264         */
     265        public static int clearClusterIds(Project project, SessionControl sessc)
     266        {
     267                int nDeleted = 0;
     268                DbControl dc = sessc.newDbControl();
     269                List<File> files = Feature.getUniqueMsFiles(project, dc);
     270                int nFiles = files.size();
     271                int count = 0;
     272                for (File msFile : files)
     273                {
     274                        log.debug("Deleting features for file " + (++count) + " of " + nFiles);
     275                        nDeleted += clearClusterIds(project, msFile, sessc);
     276                }
     277                dc.close();
     278                return nDeleted;
     279        }
     280
     281
     282        /**
     283         * Delete all cluster Ids for features from a msFile in a project
     284         *
     285         * @param project
     286         * @param msFile File
     287         * @param sessc Session Control
     288         * @return number of updated rows
     289         */
     290        public static int clearClusterIds(Project project, File msFile,
     291                        SessionControl sessc)
     292        {
     293                int nUpdated = 0;
     294                DbControl dc = sessc.newDbControl();
     295                QueryFactory qf = new QueryFactory();
     296                ItemQuery<Feature> featureQuery = qf.select(Feature.class);
     297
     298                // Only features in project should be retrieved
     299                // OBS! has hql object as input
     300                featureQuery.restrictPermanent(Restrictions.eq(Hql.property("project"),
     301                        Hql.entity(project)));
     302                featureQuery.restrict(Restrictions.eq(Hql.property("msFile"),
     303                        Hql.entity(msFile)));
     304                featureQuery
     305                        .restrict(Restrictions.neq(Hql.property("clusterId"), null));
     306
     307                for (Iterator<Feature> iter = featureQuery.iterate(dc); iter.hasNext();)
     308                {
     309                        Feature feature = iter.next();
     310                        dc.reattachItem(feature);
     311                        feature.setClusterId(null);
     312                        nUpdated++;
     313                }
     314                dc.commit();
     315                return nUpdated;
     316        }
    256317}
  • trunk/plugin/src/org/proteios/plugins/FeatureHitMatcher.java

    r4535 r4540  
    9999                return new AboutImpl("Match features to hits",
    100100                                "Match features to hits for a project", "0.5",
    101                                 "2009-2013, Marianne Sandin, Fredrik Levander", null, null,
     101                                "2009-2014, Marianne Sandin, Fredrik Levander", null, null,
    102102                                "http://www.proteios.org");
    103103        }
     
    123123                        // Start by removing previous matches
    124124                        if (progress != null) {
    125                                 progress.display(5, "Removing previous matches");
     125                                progress.display(2, "Removing previous matches");
    126126                        }
    127127                        Project project = (Project) job.getValue("project");
     
    129129                        dc.commit();
    130130                        if (progress != null) {
    131                                 progress.display(5, "Removed aligned hits");
     131                                progress.display(4, "Removed aligned hits");
    132132                        }
    133133                        dc = sc.newDbControl();
     
    136136                        dc.commit();
    137137                        if (progress != null) {
    138                                 progress.display(5, "Removed feature and hits connections");
     138                                progress.display(6, "Removed feature and hits connections");
    139139                        }
    140140                        dc = sc.newDbControl();
     
    143143                        dc.commit();
    144144                        if (progress != null) {
    145                                 progress.display(5, "Removed feature sequences");
    146                         }
     145                                progress.display(8, "Removed feature sequences");
     146                        }
     147                        ClearFeatures.clearClusterIds(project, sc);
     148                        if (progress != null) {
     149                                progress.display(10, "Removed feature cluster Ids");
     150                        }                       
    147151                        // Done with init
    148152                        dc = sc.newDbControl();
     
    486490                                                                                                .getCombinedFDR())
    487491                                                                                        best = false;
    488                                                                                 if (hh.getCombinedFDR() == h.getCombinedFDR())
     492                                                                                if (hh.getCombinedFDR().equals(h.getCombinedFDR()))
    489493                                                                                        if (hh.getExpectationValue()<=h.getExpectationValue())
    490494                                                                                                best = false;
     
    713717                hitQuery.order(Orders.asc(Hql.property("charge")));
    714718                hitQuery.order(Orders.asc(Hql.property("experimentalMassInDaltons")));
     719                hitQuery.order(Orders.asc(Hql.property("combinedFDR")));
     720                hitQuery.order(Orders.asc(Hql.property("expectationValue")));
    715721                ItemResultList<Hit> hitlist = hitQuery.list(dc);
    716722                for (Hit h : hitlist) {
  • trunk/plugin/src/org/proteios/plugins/FeatureSequencePropagator.java

    r4524 r4540  
    268268
    269269                                        dc.commit();
    270                                         dc = sc.newDbControl();
    271 
    272                                         featureQuery.restrict(Restrictions.eq(
    273                                                         Hql.property("msFile"), Hql.entity(currentMsFile)));
    274                                         featureQuery.restrict(Restrictions.neq(
    275                                                         Hql.property("clusterId"), null));
    276 
    277                                         List<Feature> allClusterIdFeatures = featureQuery.list(dc);
    278 
     270                                       
    279271                                        if (progress != null) {
    280272                                                progress.display((fileNbr + 1) / nbrOfFiles,
     
    282274                                                                                + (fileNbr + 1));
    283275                                        }
    284 
    285                                         for (Feature clusterF : allClusterIdFeatures) {
    286 
    287                                                 clusterF.setClusterId(null);
    288                                                 dc.reattachItem(clusterF);
    289 
    290                                         }
    291 
    292                                         dc.commit();
     276                                       
     277                                        ClearFeatures.clearClusterIds(project, currentMsFile, sc);
     278                                       
    293279                                        dc = sc.newDbControl();
    294280
Note: See TracChangeset for help on using the changeset viewer.