Change header template for a new version
[jabaws.git] / runner / compbio / runner / disorder / Jronn.java
index 1b9037e..5850eaf 100644 (file)
@@ -28,13 +28,12 @@ import java.util.List;
 \r
 import org.apache.log4j.Logger;\r
 \r
-import compbio.data.sequence.AnnotatedSequence;\r
+import compbio.data.sequence.ScoreManager;\r
 import compbio.data.sequence.SequenceUtil;\r
 import compbio.data.sequence.UnknownFileFormatException;\r
+import compbio.engine.client.CommandBuilder;\r
 import compbio.engine.client.Executable;\r
 import compbio.engine.client.SkeletalExecutable;\r
-import compbio.metadata.Limit;\r
-import compbio.metadata.LimitsManager;\r
 import compbio.metadata.ResultNotAvailableException;\r
 import compbio.runner.Util;\r
 \r
@@ -50,26 +49,32 @@ public class Jronn extends SkeletalExecutable<Jronn> {
 \r
        private static Logger log = Logger.getLogger(Jronn.class);\r
 \r
-       // Cache for Limits information\r
-       private static LimitsManager<Jronn> limits;\r
+       /**\r
+        * Number of cores to use, defaults to 1 for local execution or the value of\r
+        * "jronn.cluster.cpunum" property for cluster execution\r
+        */\r
+       private int ncoreNumber = 0;\r
+\r
+       private final String ncorePrm = "-n=";\r
 \r
        public static final String KEY_VALUE_SEPARATOR = Util.SPACE;\r
        public static final String STAT_FILE = "stat.txt";\r
 \r
        public Jronn() {\r
-               addParameters(Arrays.asList("-jar", getLibPath(), "-n=1", "-s="\r
-                               + STAT_FILE, "-f=H"));\r
+               addParameters(Arrays.asList("-jar", getLibPath(), "-s=" + STAT_FILE,\r
+                               "-f=H"));\r
        }\r
 \r
        @SuppressWarnings("unchecked")\r
        @Override\r
-       public List<AnnotatedSequence> getResults(String workDirectory)\r
-       throws ResultNotAvailableException {\r
-               List<AnnotatedSequence> sequences = null;\r
+       public ScoreManager getResults(String workDirectory)\r
+                       throws ResultNotAvailableException {\r
+               ScoreManager sequences = null;\r
                try {\r
                        InputStream inStream = new FileInputStream(new File(workDirectory,\r
                                        getOutput()));\r
-                       sequences = SequenceUtil.readJRonn(inStream);\r
+                       sequences = ScoreManager.newInstanceSingleScore(SequenceUtil\r
+                                       .readJRonn(inStream));\r
                        inStream.close();\r
                } catch (FileNotFoundException e) {\r
                        log.error(e.getMessage(), e.getCause());\r
@@ -88,12 +93,11 @@ public class Jronn extends SkeletalExecutable<Jronn> {
        }\r
 \r
        private static String getLibPath() {\r
-\r
                String settings = ph.getProperty("jronn.jar.file");\r
                if (compbio.util.Util.isEmpty(settings)) {\r
                        throw new NullPointerException(\r
                                        "Please define jronn.jar.file property in Executable.properties file"\r
-                                       + "and initialize it with the location of jronn jar file");\r
+                                                       + "and initialize it with the location of jronn jar file");\r
                }\r
                if (new File(settings).isAbsolute()) {\r
                        // Jronn jar can be found so no actions necessary\r
@@ -122,43 +126,45 @@ public class Jronn extends SkeletalExecutable<Jronn> {
                return this;\r
        }\r
 \r
+       @SuppressWarnings("unchecked")\r
        @Override\r
-       public Limit<Jronn> getLimit(String presetName) {\r
-               if (limits == null) {\r
-                       limits = getLimits();\r
-               }\r
-               Limit<Jronn> limit = null;\r
-               if (limits != null) {\r
-                       // this returns default limit if preset is undefined!\r
-                       limit = limits.getLimitByName(presetName);\r
-               }\r
-               // If limit is not defined for a particular preset, then return default\r
-               // limit\r
-               if (limit == null) {\r
-                       log.debug("Limit for the preset " + presetName\r
-                                       + " is not found. Using default");\r
-                       limit = limits.getDefaultLimit();\r
-               }\r
-               return limit;\r
+       public Class<Jronn> getType() {\r
+               return (Class<Jronn>) this.getClass();\r
        }\r
 \r
-       @Override\r
-       public LimitsManager<Jronn> getLimits() {\r
-               // synchronise on static field\r
-               synchronized (log) {\r
-                       if (limits == null) {\r
-                               limits = Util.getLimits(this.getClass());\r
-                       }\r
+       public static String getStatFile() {\r
+               return STAT_FILE;\r
+       }\r
+\r
+       public void setNCore(int ncoreNumber) {\r
+               if (ncoreNumber < 1 || ncoreNumber > 100) {\r
+                       throw new IndexOutOfBoundsException(\r
+                                       "Number of cores must be within 1 and 100 ");\r
                }\r
-               return limits;\r
+               this.ncoreNumber = ncoreNumber;\r
+               cbuilder.setParam(ncorePrm + Integer.toString(getNCore()));\r
        }\r
 \r
-       @Override\r
-       public Class<? extends Executable<?>> getType() {\r
-               return this.getClass();\r
+       int getNCore() {\r
+               return ncoreNumber;\r
        }\r
 \r
-       public static String getStatFile() {\r
-               return STAT_FILE;\r
+       @Override\r
+       public CommandBuilder<Jronn> getParameters(ExecProvider provider) {\r
+               // If number of cores is provided, set it for the cluster execution\r
+               // only!\r
+               if (provider == Executable.ExecProvider.Cluster) {\r
+                       int cpunum = SkeletalExecutable.getClusterCpuNum(getType());\r
+                       cpunum = (cpunum == 0) ? 1 : cpunum;\r
+                       setNCore(cpunum);\r
+               } else {\r
+                       // Limit number of cores to 1 for ANY execution which does not set\r
+                       // Ncores explicitly using setNCore method or is run on local VM\r
+                       if (ncoreNumber == 0) {\r
+                               setNCore(1);\r
+                       }\r
+               }\r
+               return super.getParameters(provider);\r
        }\r
+\r
 }\r