From 7ca476259c49a11eaca99ca48371970e0c733d16 Mon Sep 17 00:00:00 2001 From: Ola Spjuth Date: Wed, 30 Jun 2010 13:47:31 +0200 Subject: [PATCH] Reworked Generators for DS selections. * Switch Generator on SelectionChanged * Contribute atoms to generators vis GeneratorParameter, not AtomContainer.Properties * ITestResult contribute GeneratorParameters * Added Visible and AtomMap parameter to Generators in DS --- .../ds/bursi/signatures/SignSIgRunner.java | 16 +- .../bioclipse/ds/matcher/SmartsMatcher.java | 1 - .../ds/cpdb/signatures/CPDBSignSigRunner.java | 3 +- plugins/net.bioclipse.ds.ui/plugin.xml | 8 - .../src/net/bioclipse/ds/ui/ImageHelper.java | 5 +- .../src/net/bioclipse/ds/ui/views/DSView.java | 70 ++++++++- plugins/net.bioclipse.ds/META-INF/MANIFEST.MF | 7 +- plugins/net.bioclipse.ds/plugin.xml | 10 ++ .../src/net/bioclipse/ds}/DSPrefs.java | 2 +- .../net/bioclipse/ds/model/ITestResult.java | 10 +- .../ds/model/result/AtomResultMatch.java | 37 +++++ .../result}/BlueRedColorScaleGenerator.java | 84 +++++++--- .../ds/model/result}/ColorHelper.java | 19 ++- .../ds/model/result}/DSResultHelper.java | 2 +- .../ds/model/result/DoubleResult.java | 4 + .../model/result/PosNegIncColorGenerator.java | 143 ++++++++++++++++++ .../ds/model/result/PosNegIncMatch.java | 27 ++++ .../ds/model/result/ScaledResultMatch.java | 52 ++----- .../ds/model/result/SimpleResult.java | 35 ++++- .../ds/model/result/SmartsMatch.java | 4 +- .../ds/model/result/SubStructureMatch.java | 3 + 21 files changed, 439 insertions(+), 103 deletions(-) rename plugins/{net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/prefs => net.bioclipse.ds/src/net/bioclipse/ds}/DSPrefs.java (78%) create mode 100644 plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/AtomResultMatch.java rename plugins/{net.bioclipse.ds.ui/src/net/bioclipse/ds/ui => net.bioclipse.ds/src/net/bioclipse/ds/model/result}/BlueRedColorScaleGenerator.java (55%) rename plugins/{net.bioclipse.ds.ui/src/net/bioclipse/ds/ui => net.bioclipse.ds/src/net/bioclipse/ds/model/result}/ColorHelper.java (76%) rename plugins/{net.bioclipse.ds.ui/src/net/bioclipse/ds/ui => net.bioclipse.ds/src/net/bioclipse/ds/model/result}/DSResultHelper.java (96%) create mode 100644 plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/PosNegIncColorGenerator.java create mode 100644 plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/PosNegIncMatch.java diff --git a/plugins/net.bioclipse.ds.bursi.signatures/src/net/bioclipse/ds/bursi/signatures/SignSIgRunner.java b/plugins/net.bioclipse.ds.bursi.signatures/src/net/bioclipse/ds/bursi/signatures/SignSIgRunner.java index 08f4f807..4ed4b2da 100644 --- a/plugins/net.bioclipse.ds.bursi.signatures/src/net/bioclipse/ds/bursi/signatures/SignSIgRunner.java +++ b/plugins/net.bioclipse.ds.bursi.signatures/src/net/bioclipse/ds/bursi/signatures/SignSIgRunner.java @@ -37,6 +37,7 @@ import net.bioclipse.ds.model.DSException; import net.bioclipse.ds.model.IDSTest; import net.bioclipse.ds.model.ITestResult; +import net.bioclipse.ds.model.result.PosNegIncMatch; import net.bioclipse.ds.model.result.ScaledResultMatch; import net.bioclipse.ds.model.result.SubStructureMatch; import net.bioclipse.ds.signatures.business.ISignaturesManager; @@ -382,7 +383,7 @@ protected List doRunTest( ICDKMolecule cdkmol, //Create a new match with correct coloring // SubStructureMatch match = new SubStructureMatch(significantSignature,ITestResult.INCONCLUSIVE); - ScaledResultMatch match = new ScaledResultMatch(significantSignature,ITestResult.INCONCLUSIVE); + PosNegIncMatch match = new PosNegIncMatch(significantSignature,ITestResult.INCONCLUSIVE); if (prediction>0) match.setClassification( ITestResult.POSITIVE ); @@ -398,8 +399,9 @@ protected List doRunTest( ICDKMolecule cdkmol, //We should add atoms from the input cdkmol, not the clone! // significantAtomsContainer.addAtom( cdkmol.getAtomContainer().getAtom( significantAtomNumber )); logger.debug("center atom: " + significantAtom); - //Set to max for scaledresult - match.putAtomResult( significantAtomNumber, 100 ); + + //Set each atom to overall match classification + match.putAtomResult( significantAtomNumber, match.getClassification() ); //Also add all atoms connected to significant atoms to list for (IAtom nbr : cdkmol.getAtomContainer().getConnectedAtomsList(cdkmol.getAtomContainer().getAtom( significantAtomNumber )) ){ @@ -408,8 +410,8 @@ protected List doRunTest( ICDKMolecule cdkmol, // significantAtomsContainer.addAtom(atomToAdd); logger.debug("nbr atom: " + nbrAtomNr); - //Set to max for scaledresult - match.putAtomResult( nbrAtomNr, 100 ); + //Set each atom to overall match classification + match.putAtomResult( nbrAtomNr, match.getClassification() ); } } logger.debug("Number of center atoms: " + significantAtoms.size()); @@ -417,8 +419,8 @@ protected List doRunTest( ICDKMolecule cdkmol, //We want to set the color of the hilighting depending on the prediction. If the decision function > 0.0 the color should be red, otherwise it should be green. //we also want the filled circles to be larger so that they become visible for non carbons. // match.setAtomContainer( significantAtomsContainer ); - match.writeResultsAsProperties( cdkmol.getAtomContainer(), - net.bioclipse.ds.bursi.signatures.Activator.BURSI_RESULT_PROPERTY); +// match.writeResultsAsProperties( cdkmol.getAtomContainer(), +// net.bioclipse.ds.bursi.signatures.Activator.BURSI_RESULT_PROPERTY); //We can have multiple hits... List results=new ArrayList(); diff --git a/plugins/net.bioclipse.ds.common/src/net/bioclipse/ds/matcher/SmartsMatcher.java b/plugins/net.bioclipse.ds.common/src/net/bioclipse/ds/matcher/SmartsMatcher.java index 8afee606..dae7d8d3 100644 --- a/plugins/net.bioclipse.ds.common/src/net/bioclipse/ds/matcher/SmartsMatcher.java +++ b/plugins/net.bioclipse.ds.common/src/net/bioclipse/ds/matcher/SmartsMatcher.java @@ -252,7 +252,6 @@ protected List doRunTest( ICDKMolecule cdkmol, match.putAtomResult( aindex, 100 ); } match.setSmartsString( currentSmarts ); - match.writeResultsAsProperties( cdkmol.getAtomContainer(), "SMARTS"); results.add( match ); } diff --git a/plugins/net.bioclipse.ds.cpdb.signatures/src/net/bioclipse/ds/cpdb/signatures/CPDBSignSigRunner.java b/plugins/net.bioclipse.ds.cpdb.signatures/src/net/bioclipse/ds/cpdb/signatures/CPDBSignSigRunner.java index 0582bb05..b538aee0 100644 --- a/plugins/net.bioclipse.ds.cpdb.signatures/src/net/bioclipse/ds/cpdb/signatures/CPDBSignSigRunner.java +++ b/plugins/net.bioclipse.ds.cpdb.signatures/src/net/bioclipse/ds/cpdb/signatures/CPDBSignSigRunner.java @@ -438,8 +438,7 @@ protected List doRunTest( ICDKMolecule cdkmol, //we also want the filled circles to be larger so that they become visible for non carbons. // match.setAtomContainer( significantAtomsContainer ); - match.writeResultsAsProperties(cdkmol.getAtomContainer(), - net.bioclipse.ds.cpdb.signatures.Activator.CPDB_RESULT_PROPERTY); +// match.writeResultsAsProperties(cdkmol.getAtomContainer(), "BOGUS"); //We can have multiple hits... List results=new ArrayList(); diff --git a/plugins/net.bioclipse.ds.ui/plugin.xml b/plugins/net.bioclipse.ds.ui/plugin.xml index 80e0b353..835b0fc6 100644 --- a/plugins/net.bioclipse.ds.ui/plugin.xml +++ b/plugins/net.bioclipse.ds.ui/plugin.xml @@ -2,14 +2,6 @@ - - - - - - > visibilityParam = tr.getGeneratorVisibility(); + Class>> atomMapParam = tr.getGeneratorAtomMap(); + + if (visibilityParam==null){ + logger.debug("The selected TestResult does not provide a generatorVisibility."); + return; + } + + JChemPaintEditor jcp=getJCPfromActiveEditor(); + if (jcp==null) return; + + RendererModel model = jcp.getWidget().getRenderer2DModel(); + + //And turn only the selected on + model.set(visibilityParam, true); + logger.debug("Turned on Generator: " + tr.getGeneratorVisibility()); + + if (atomMapParam!=null){ + if (tr instanceof AtomResultMatch) { + AtomResultMatch atomResMatch = (AtomResultMatch) tr; + model.set(atomMapParam, atomResMatch.getResultMap()); + logger.debug(" ...and AtomMapGeneratorParameter is used with content."); + }else{ + logger.debug(" ...however, an AtomMapGeneratorParameter is available but TestResult is not PosNegIncMatch."); + } + + } + else{ + logger.debug(" ...however, no AtomMapGeneratorParameter is available."); + } + + } } + + private void turnOffAllExternalGenerators() { + //Switch off all other DS-generators! + List> generators = ChoiceGenerator.getGeneratorsFromExtension(); + for(IGenerator generator: generators) { + List> params = generator.getParameters(); + if(params.isEmpty()) continue; + for (IGeneratorParameter param : params){ + if (param instanceof BlueRedColorScaleGenerator.Visibility) { + BlueRedColorScaleGenerator.Visibility v = (BlueRedColorScaleGenerator.Visibility) param; + v.setValue(false); + logger.debug("Turned off Generator: " + generator); + } + if (param instanceof PosNegIncColorGenerator.Visibility) { + PosNegIncColorGenerator.Visibility v = (PosNegIncColorGenerator.Visibility) param; + v.setValue(false); + logger.debug("Turned off Generator: " + generator); + } +// if (param instanceof IGeneratorParameter) { +// IGeneratorParameter bp= (IGeneratorParameter)param; +// model.set(bp, false); +// } + } + } + } }); diff --git a/plugins/net.bioclipse.ds/META-INF/MANIFEST.MF b/plugins/net.bioclipse.ds/META-INF/MANIFEST.MF index 616f7ff3..444897c3 100644 --- a/plugins/net.bioclipse.ds/META-INF/MANIFEST.MF +++ b/plugins/net.bioclipse.ds/META-INF/MANIFEST.MF @@ -13,9 +13,12 @@ Require-Bundle: org.eclipse.ui, net.bioclipse.cdk.business, net.bioclipse.cdk.jchempaint, org.openscience.cdk.interfaces, - org.openscience.cdk.nonotify + org.openscience.cdk.nonotify, + org.openscience.cdk.render;bundle-version="1.3.5", + org.openscience.cdk.renderbasic;bundle-version="1.3.5" Bundle-ActivationPolicy: lazy -Import-Package: org.apache.log4j +Import-Package: javax.vecmath, + org.apache.log4j Export-Package: net.bioclipse.ds, net.bioclipse.ds.business, net.bioclipse.ds.model, diff --git a/plugins/net.bioclipse.ds/plugin.xml b/plugins/net.bioclipse.ds/plugin.xml index 4f36223b..f96e5036 100644 --- a/plugins/net.bioclipse.ds/plugin.xml +++ b/plugins/net.bioclipse.ds/plugin.xml @@ -12,4 +12,14 @@ + + + + + + + diff --git a/plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/prefs/DSPrefs.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/DSPrefs.java similarity index 78% rename from plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/prefs/DSPrefs.java rename to plugins/net.bioclipse.ds/src/net/bioclipse/ds/DSPrefs.java index 7efb0135..dba55089 100644 --- a/plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/prefs/DSPrefs.java +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/DSPrefs.java @@ -1,4 +1,4 @@ -package net.bioclipse.ds.ui.prefs; +package net.bioclipse.ds; /** * diff --git a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/ITestResult.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/ITestResult.java index c375226a..0221e20b 100644 --- a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/ITestResult.java +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/ITestResult.java @@ -10,8 +10,12 @@ ******************************************************************************/ package net.bioclipse.ds.model; +import java.util.Map; + import org.eclipse.core.runtime.IAdaptable; import org.eclipse.swt.graphics.Image; +import org.openscience.cdk.renderer.generators.IGenerator; +import org.openscience.cdk.renderer.generators.IGeneratorParameter; import net.bioclipse.cdk.domain.ISubStructure; @@ -57,8 +61,10 @@ public interface ITestResult extends IAdaptable{ String getSuffix(); - public String getResultProperty(); - public void setResultProperty( String propertyKey ); +// public String getResultProperty(); +// public void setResultProperty( String propertyKey ); + public Class> getGeneratorVisibility(); + public Class>> getGeneratorAtomMap(); } diff --git a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/AtomResultMatch.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/AtomResultMatch.java new file mode 100644 index 00000000..2f6a551e --- /dev/null +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/AtomResultMatch.java @@ -0,0 +1,37 @@ +package net.bioclipse.ds.model.result; + +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author ola + */ +public class AtomResultMatch extends SubStructureMatch{ + + //AtomNumber > Value + private Map resultMap; + + public AtomResultMatch(String name, int resultStatus) { + super( name, resultStatus ); + resultMap=new HashMap(); + } + + public void setResultMap( Map resulMap ) { + this.resultMap = resulMap; + } + + public Map getResultMap() { + return resultMap; + } + + public void putAtomResult( Integer atomToAdd, Integer result ) { + if (resultMap==null) resultMap=new HashMap(); + resultMap.put( atomToAdd, result ); + if (!getAtomNumbers().contains( atomToAdd )){ + getAtomNumbers().add( atomToAdd ); + } + + } + +} diff --git a/plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/BlueRedColorScaleGenerator.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/BlueRedColorScaleGenerator.java similarity index 55% rename from plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/BlueRedColorScaleGenerator.java rename to plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/BlueRedColorScaleGenerator.java index f58f687b..ff8406fc 100644 --- a/plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/BlueRedColorScaleGenerator.java +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/BlueRedColorScaleGenerator.java @@ -8,17 +8,19 @@ * Contributors: * Ola Spjuth - initial API and implementation ******************************************************************************/ -package net.bioclipse.ds.ui; +package net.bioclipse.ds.model.result; import java.awt.Color; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import net.bioclipse.ds.Activator; -import net.bioclipse.ds.ui.prefs.DSPrefs; -import net.bioclipse.ds.ui.views.DSView; +import net.bioclipse.ds.DSPrefs; +import net.bioclipse.ds.model.result.PosNegIncColorGenerator.AtomMap; +import org.apache.log4j.Logger; import org.eclipse.jface.preference.IPreferenceStore; import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; @@ -29,18 +31,54 @@ import org.openscience.cdk.renderer.generators.IGenerator; import org.openscience.cdk.renderer.generators.IGeneratorParameter; import org.openscience.cdk.renderer.generators.BasicAtomGenerator.CompactAtom; +import org.openscience.cdk.renderer.generators.parameter.AbstractGeneratorParameter; /** + * A generator to draw circles with color on a scale between blue and red. * * @author ola * */ public class BlueRedColorScaleGenerator implements IGenerator { + private static final Logger logger = Logger.getLogger(BlueRedColorScaleGenerator.class); + public BlueRedColorScaleGenerator() { } + /** + * Adds the ability to turn the generator on/off via a Handler. + * False by default. + */ + public static class Visibility extends + AbstractGeneratorParameter { + public Boolean getDefault() { + return false; + } + } + private static IGeneratorParameter visible = new Visibility(); + + public static void setVisible(Boolean visible1) { + visible.setValue(visible1); + } + + /** + * Define values for per atom index for coloring + */ + public static class AtomMap extends + AbstractGeneratorParameter> { + public Map getDefault() { + return Collections.EMPTY_MAP; + } + } + private static IGeneratorParameter> atomMap = new AtomMap(); + + public static void setVisible(Map map) { + atomMap.setValue(map); + } + + /** * Set up the colored M2D circles based on calculated properties */ @@ -48,15 +86,14 @@ public IRenderingElement generate( IAtomContainer ac, RendererModel model ) { ElementGroup group = new ElementGroup(); - - if (DSView.getInstance()==null) return group; - - String currentProperty=DSView.getInstance().getCurrentResultProperty(); - if (currentProperty==null) return group; - - Object o = ac.getProperty( currentProperty ); -// System.out.println("DS-RES:" + ac.hashCode() + "="+o); - if (o==null) return group; + + if (visible.getValue()==false) + return group; + //If no atommap, do not paint + if (atomMap.getValue().size()<=0){ + logger.error("A BlueRedColorScaleGenerator is used, but AtomMap was empty."); + return group; + } //Read prefs for rendering params and compute real values IPreferenceStore store=Activator.getDefault().getPreferenceStore(); @@ -65,26 +102,23 @@ public IRenderingElement generate( IAtomContainer ac, if (circleRadius<=0 || circleRadius >1) circleRadius=0.4; - Map atomResMap = DSResultHelper - .getResultsFromProperty( (String)o ); - for(int i = 0;i> getParameters() { - return Collections.emptyList(); + return Arrays.asList( + new IGeneratorParameter[] { + visible, atomMap + } + ); } } diff --git a/plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/ColorHelper.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/ColorHelper.java similarity index 76% rename from plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/ColorHelper.java rename to plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/ColorHelper.java index f098b195..9dab9062 100644 --- a/plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/ColorHelper.java +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/ColorHelper.java @@ -8,13 +8,14 @@ * Contributors: * Ola Spjuth - initial API and implementation ******************************************************************************/ -package net.bioclipse.ds.ui; +package net.bioclipse.ds.model.result; import java.awt.Color; import java.util.HashMap; import java.util.Map; import net.bioclipse.ds.DSConstants; +import net.bioclipse.ds.model.ITestResult; /** * @@ -49,4 +50,20 @@ public static Color getBlueRedColor( int resValue ) { return blueRedScale.get( resValue ); } + /** + * Return a color based on POS/NEG/INCONCLUSIVE + * @param resValue An integer as defined in ITestResult + * @return + */ + public static Color getPosNegIncDiscreteColor( int resValue ) { + + if (resValue==ITestResult.POSITIVE) + return Color.RED; + if (resValue==ITestResult.NEGATIVE) + return Color.GREEN; + + return Color.ORANGE; + + } + } diff --git a/plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/DSResultHelper.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/DSResultHelper.java similarity index 96% rename from plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/DSResultHelper.java rename to plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/DSResultHelper.java index dbb24696..f03a5fd9 100644 --- a/plugins/net.bioclipse.ds.ui/src/net/bioclipse/ds/ui/DSResultHelper.java +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/DSResultHelper.java @@ -8,7 +8,7 @@ * Contributors: * Ola Spjuth - initial API and implementation ******************************************************************************/ -package net.bioclipse.ds.ui; +package net.bioclipse.ds.model.result; import java.util.HashMap; import java.util.Map; diff --git a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/DoubleResult.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/DoubleResult.java index 6ff1e9e0..265d1531 100644 --- a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/DoubleResult.java +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/DoubleResult.java @@ -25,9 +25,13 @@ public DoubleResult(String name, Double value, int classification) { @Override public String getName() { + if (Double.isNaN(getValue())) + return super.getName() + ": NaN" ; + else return super.getName() + ": " + formatter.format( getValue() ); } + public double getValue() { return value; } diff --git a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/PosNegIncColorGenerator.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/PosNegIncColorGenerator.java new file mode 100644 index 00000000..0089f288 --- /dev/null +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/PosNegIncColorGenerator.java @@ -0,0 +1,143 @@ +/* ***************************************************************************** + * Copyright (c) 2010 Ola Spjuth - ospjuth@users.sf.net + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Ola Spjuth - initial API and implementation + ******************************************************************************/ +package net.bioclipse.ds.model.result; + + import java.awt.Color; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import net.bioclipse.ds.Activator; +import net.bioclipse.ds.DSPrefs; + +import org.apache.log4j.Logger; +import org.eclipse.jface.preference.IPreferenceStore; +import org.openscience.cdk.interfaces.IAtom; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.renderer.RendererModel; +import org.openscience.cdk.renderer.elements.ElementGroup; +import org.openscience.cdk.renderer.elements.IRenderingElement; +import org.openscience.cdk.renderer.elements.OvalElement; +import org.openscience.cdk.renderer.generators.IGenerator; +import org.openscience.cdk.renderer.generators.IGeneratorParameter; +import org.openscience.cdk.renderer.generators.parameter.AbstractGeneratorParameter; + +/** + * A generator to draw circles with color; + * Red=Positive, Greem=Negative, Orange=Inconclusive. + * + * Takes 2 GeneratorParameters: + * Boolean visible - defines if generator shopuld be used + * and + * Map atomMap - maps from atom indices to a result for this atom + * + * @author ola + * + */ +public class PosNegIncColorGenerator implements IGenerator { + + private static final Logger logger = Logger.getLogger(PosNegIncColorGenerator.class); + + public PosNegIncColorGenerator() { + + } + + /** + * Adds the ability to turn the generator on/off via a Handler. + * False by default. + */ + public static class Visibility extends + AbstractGeneratorParameter { + public Boolean getDefault() { + return false; + } + } + private static IGeneratorParameter visible = new Visibility(); + + public static void setVisible(Boolean visible1) { + visible.setValue(visible1); + } + + /** + * Define values for per atom index for coloring + */ + public static class AtomMap extends + AbstractGeneratorParameter> { + public Map getDefault() { + return Collections.EMPTY_MAP; + } + } + private static IGeneratorParameter> atomMap = new AtomMap(); + + public static void setVisible(Map map) { + atomMap.setValue(map); + } + + + /** + * Set up the colored M2D circles based on calculated properties + */ + public IRenderingElement generate( IAtomContainer ac, + RendererModel model ) { + + ElementGroup group = new ElementGroup(); + + //If not visible, do not paint + if (visible.getValue()==false) + return group; + //If no property, do not paint + if (atomMap.getValue().size()<=0){ + logger.error("A PosNegColorGenerator is used, but AtomMap was empty."); + return group; + } + + //Read prefs for rendering params and compute real values + IPreferenceStore store=Activator.getDefault().getPreferenceStore(); + int circleRadiusPref = store.getInt( DSPrefs.CIRCLE_RADIUS ); + double circleRadius=(double)circleRadiusPref / 10; + if (circleRadius<=0 || circleRadius >1) + circleRadius=0.4; + + for(int i = 0;i> getParameters() { + return Arrays.asList( + new IGeneratorParameter[] { + visible, atomMap + } + ); + } +} diff --git a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/PosNegIncMatch.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/PosNegIncMatch.java new file mode 100644 index 00000000..c50106ad --- /dev/null +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/PosNegIncMatch.java @@ -0,0 +1,27 @@ +package net.bioclipse.ds.model.result; + + +import java.util.Map; +import org.openscience.cdk.renderer.generators.IGeneratorParameter; + +/** + * + * @author ola + */ +public class PosNegIncMatch extends AtomResultMatch{ + + + public PosNegIncMatch(String name, int resultStatus) { + super(name, resultStatus); + } + + @Override + public Class> getGeneratorVisibility() { + return (Class>)PosNegIncColorGenerator.Visibility.class; + } + + @Override + public Class>> getGeneratorAtomMap() { + return (Class>>)PosNegIncColorGenerator.AtomMap.class; + } +} diff --git a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/ScaledResultMatch.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/ScaledResultMatch.java index 4fc8c81b..42ee5b19 100644 --- a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/ScaledResultMatch.java +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/ScaledResultMatch.java @@ -5,6 +5,7 @@ import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.renderer.generators.IGeneratorParameter; import net.bioclipse.ds.DSConstants; @@ -12,54 +13,21 @@ * * @author ola */ -public class ScaledResultMatch extends SubStructureMatch{ +public class ScaledResultMatch extends AtomResultMatch{ - //AtomNumber > Value - private Map resultMap; public ScaledResultMatch(String name, int resultStatus) { - super( name, resultStatus ); - resultMap=new HashMap(); - } - - public void setResultMap( Map resulMap ) { - this.resultMap = resulMap; - } - - public Map getResultMap() { - return resultMap; - } + super(name, resultStatus); + } - public void putAtomResult( Integer atomToAdd, Integer result ) { - if (resultMap==null) resultMap=new HashMap(); - resultMap.put( atomToAdd, result ); - if (!getAtomNumbers().contains( atomToAdd )){ - getAtomNumbers().add( atomToAdd ); - } - + @Override + public Class> getGeneratorVisibility() { + return (Class>)BlueRedColorScaleGenerator.Visibility.class; } - /** - * Serialize resultmap to property on AC - */ - public void writeResultsAsProperties(IAtomContainer ac, String propertyKey){ - - if (ac==null) return; - if (resultMap==null || resultMap.isEmpty()) return; - - String prop=""; - for (Integer atomNo : resultMap.keySet()){ - int res=resultMap.get( atomNo ); - if (prop.length()==0){ //first - prop=prop+ atomNo + "," + res; - }else{ - prop=prop+ ";" + atomNo + "," + res; - } - } - - ac.getProperties().put( propertyKey, prop ); - setResultProperty( propertyKey ); - + @Override + public Class>> getGeneratorAtomMap() { + return (Class>>)BlueRedColorScaleGenerator.AtomMap.class; } } diff --git a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SimpleResult.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SimpleResult.java index f8ec64f2..43b9c3e2 100644 --- a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SimpleResult.java +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SimpleResult.java @@ -10,6 +10,8 @@ ******************************************************************************/ package net.bioclipse.ds.model.result; +import java.util.Map; + import net.bioclipse.ds.Activator; import net.bioclipse.ds.model.ITestResult; import net.bioclipse.ds.model.TestRun; @@ -17,6 +19,8 @@ import org.eclipse.swt.graphics.Image; import org.eclipse.ui.views.properties.IPropertySource; +import org.openscience.cdk.renderer.generators.IGenerator; +import org.openscience.cdk.renderer.generators.IGeneratorParameter; /** * A base class for results with a name, a parent testrun, and a status @@ -35,7 +39,7 @@ public class SimpleResult implements ITestResult{ private String name; private int classification; private String detailedMessage; - private String resultProperty; //Used to link a result to a certain property on AC +// private String resultProperty; //Used to link a result to a certain property on AC public SimpleResult(String name, int classification) { @@ -124,13 +128,13 @@ public String getSuffix(){ return ""; } - public String getResultProperty() { - return resultProperty; - } - - public void setResultProperty( String propertyKey ) { - resultProperty=propertyKey; - } +// public String getResultProperty() { +// return resultProperty; +// } +// +// public void setResultProperty( String propertyKey ) { +// resultProperty=propertyKey; +// } @Override public String toString() { @@ -138,4 +142,19 @@ public String toString() { + StatusHelper.statusToString( getClassification()); } + /** + * No default generator visibility. + */ + @Override + public Class> getGeneratorVisibility() { + return null; + } + + @Override + public Class>> getGeneratorAtomMap() { + return null; + } + + + } diff --git a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SmartsMatch.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SmartsMatch.java index 63526a1c..99a0ec82 100644 --- a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SmartsMatch.java +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SmartsMatch.java @@ -16,7 +16,7 @@ * @author ola * */ -public class SmartsMatch extends ScaledResultMatch{ +public class SmartsMatch extends PosNegIncMatch{ public SmartsMatch(String name, int resultStatus) { super( name, resultStatus ); @@ -33,5 +33,5 @@ public void setSmartsString( String smarts ) { this.smartsString = smarts; } - + } diff --git a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SubStructureMatch.java b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SubStructureMatch.java index d162c410..37bae093 100644 --- a/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SubStructureMatch.java +++ b/plugins/net.bioclipse.ds/src/net/bioclipse/ds/model/result/SubStructureMatch.java @@ -22,6 +22,9 @@ */ public class SubStructureMatch extends SimpleResult{ + /** + * A list of atom numbers defining this substructure match + */ private List atomNumbers; public SubStructureMatch(String name, int resultStatus) {