{"action":"created","comment":{"url":"https://api.github.com/repos/imagej/imagej-ops/pulls/comments/67119751","id":67119751,"diff_hunk":"@@ -0,0 +1,64 @@\n+/*\n+ * #%L\n+ * ImageJ software for multidimensional image processing and analysis.\n+ * %%\n+ * Copyright (C) 2014 - 2016 Board of Regents of the University of\n+ * Wisconsin-Madison, University of Konstanz and Brian Northan.\n+ * %%\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are met:\n+ * \n+ * 1. Redistributions of source code must retain the above copyright notice,\n+ *    this list of conditions and the following disclaimer.\n+ * 2. Redistributions in binary form must reproduce the above copyright notice,\n+ *    this list of conditions and the following disclaimer in the documentation\n+ *    and/or other materials provided with the distribution.\n+ * \n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\n+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n+ * POSSIBILITY OF SUCH DAMAGE.\n+ * #L%\n+ */\n+package net.imagej.ops.features.sets.tables;\n+\n+import java.util.Map;\n+\n+import net.imagej.ops.features.sets.ComputerSet;\n+import net.imagej.ops.features.sets.processors.ComputerSetProcessor;\n+import net.imagej.table.Column;\n+import net.imagej.table.Table;\n+import net.imglib2.type.Type;\n+\n+/**\n+ * This class creates a result table for a {@link ComputerSetProcessor}.\n+ *\n+ * @author Tim-Oliver Buchholz, University of Konstanz.\n+ *\n+ * @param <O>\n+ *            datatype of the table entries\n+ */\n+public interface ComputerSetTableService<O extends Type<O>> {\n+\n+\t/**\n+\t * Create a new {@link Table} to store the results of a\n+\t * {@link ComputerSetProcessor}.\n+\t *\n+\t * @param featuresets\n+\t *            of the {@link ComputerSetProcessor}\n+\t * @param names\n+\t *            a map which maps a unique name to each {@link ComputerSet}\n+\t * @param numRows\n+\t *            number of rows\n+\t * @return a table with a column for each feature and numRows rows.\n+\t */\n+\tpublic Table<Column<O>, O> createTable(final ComputerSet<?, O>[] featuresets,","path":"src/main/java/net/imagej/ops/features/sets/tables/ComputerSetTableService.java","position":62,"original_position":62,"commit_id":"0b8c661e95dbe6d0924de295917155465d81b81c","original_commit_id":"2665e4d100b3bc40f4f80a332f25d635d05e3d8b","user":{"login":"dietzc","id":1267990,"avatar_url":"https://avatars.githubusercontent.com/u/1267990?v=3","gravatar_id":"","url":"https://api.github.com/users/dietzc","html_url":"https://github.com/dietzc","followers_url":"https://api.github.com/users/dietzc/followers","following_url":"https://api.github.com/users/dietzc/following{/other_user}","gists_url":"https://api.github.com/users/dietzc/gists{/gist_id}","starred_url":"https://api.github.com/users/dietzc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dietzc/subscriptions","organizations_url":"https://api.github.com/users/dietzc/orgs","repos_url":"https://api.github.com/users/dietzc/repos","events_url":"https://api.github.com/users/dietzc/events{/privacy}","received_events_url":"https://api.github.com/users/dietzc/received_events","type":"User","site_admin":false},"body":"wording `featureset`.","created_at":"2016-06-15T08:30:54Z","updated_at":"2016-06-15T08:30:54Z","html_url":"https://github.com/imagej/imagej-ops/pull/408#discussion_r67119751","pull_request_url":"https://api.github.com/repos/imagej/imagej-ops/pulls/408","_links":{"self":{"href":"https://api.github.com/repos/imagej/imagej-ops/pulls/comments/67119751"},"html":{"href":"https://github.com/imagej/imagej-ops/pull/408#discussion_r67119751"},"pull_request":{"href":"https://api.github.com/repos/imagej/imagej-ops/pulls/408"}}},"pull_request":{"url":"https://api.github.com/repos/imagej/imagej-ops/pulls/408","id":73722085,"html_url":"https://github.com/imagej/imagej-ops/pull/408","diff_url":"https://github.com/imagej/imagej-ops/pull/408.diff","patch_url":"https://github.com/imagej/imagej-ops/pull/408.patch","issue_url":"https://api.github.com/repos/imagej/imagej-ops/issues/408","number":408,"state":"open","locked":false,"title":"feature sets table","user":{"login":"tibuch","id":5450869,"avatar_url":"https://avatars.githubusercontent.com/u/5450869?v=3","gravatar_id":"","url":"https://api.github.com/users/tibuch","html_url":"https://github.com/tibuch","followers_url":"https://api.github.com/users/tibuch/followers","following_url":"https://api.github.com/users/tibuch/following{/other_user}","gists_url":"https://api.github.com/users/tibuch/gists{/gist_id}","starred_url":"https://api.github.com/users/tibuch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tibuch/subscriptions","organizations_url":"https://api.github.com/users/tibuch/orgs","repos_url":"https://api.github.com/users/tibuch/repos","events_url":"https://api.github.com/users/tibuch/events{/privacy}","received_events_url":"https://api.github.com/users/tibuch/received_events","type":"User","site_admin":false},"body":"This PR adds so called ComputerSets (<==> FeatureSet). A ComputerSet holds different ComputerOps which build a common known measurement-group. \r\n\r\nNow all FirstOrderStats ops could be combined in a FirstOrderStatsComputerSet. Same goes for different groups like Zernike, Histogram or Geometric2D (and many others which have to be implemented). \r\n\r\nThere are non-configurable and configurable ComputerSets. Configurable means that each op of this ComputerSet could either be active or inactive. \r\n\r\nThe ComputerSets are processed by the ComputerSetProcessor. There are three different implementations. One for ComputerSets based on Iterables (FirstOrderStats), one for ComputerSets based on LabelRegions (Geometric2D) and one for ComputerSets which should be computed over ROIs (FirstOrderStats on every segment of a LabelRegions).\r\n\r\nTo a ComputerSetProcessor arbitrarily many ComputerSets could be added. The ComputerSetProcessor will create a Table with a column for each computed op of every ComputerSet. The IterableComputerSetProcessor creates a table with one output row and the LabelRegions- and ROIComputerSetProcessor creates a output row for each segment of the Labeling. \r\nThe ComputerSetProcessor takes care of unique column names in the output-table. \r\n\r\n```\r\n// create a FirstOrderStatsComputerSet with all Computers activated\r\nFirstOrderStatsComputerSet<Iterable, DoubleType> stats = ops.op(FirstOrderStatsComputerSet.class,\r\n\t\t\t\tIterable.class);\r\n\r\n// create a FirstOrderStatsComputerSet with only Mean and Max Computers activated\r\nFirstOrderStatsComputerSet<Iterable, DoubleType> stats1 = ops.op(FirstOrderStatsComputerSet.class,\r\n\t\t\t\tIterable.class, Arrays.asList(new Class[] { Mean.class, Max.class }));\r\n\r\n// create an IterableComputerSetProcessor which holds the two ComputerSets\r\n\t\tIterableComputerSetProcessor<FloatType, DoubleType> processor = ops.op(IterableComputerSetProcessor.class,\r\n\t\t\t\tIterable.class, new ComputerSet[] { stats, stats1 }, new DefaultComputerSetTableService<>());\r\n\r\n// compute the ComputerSets on img\r\n\t\tTable<Column<DoubleType>, DoubleType> result = processor.compute1(img);\r\n```\r\n\r\n@dietzc and @ctrueden please take a look. ","created_at":"2016-06-14T11:20:58Z","updated_at":"2016-06-15T08:30:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7b23f4d27d34656820d50146b137b64755d9875a","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/imagej/imagej-ops/pulls/408/commits","review_comments_url":"https://api.github.com/repos/imagej/imagej-ops/pulls/408/comments","review_comment_url":"https://api.github.com/repos/imagej/imagej-ops/pulls/comments{/number}","comments_url":"https://api.github.com/repos/imagej/imagej-ops/issues/408/comments","statuses_url":"https://api.github.com/repos/imagej/imagej-ops/statuses/0b8c661e95dbe6d0924de295917155465d81b81c","head":{"label":"imagej:feature-sets-table","ref":"feature-sets-table","sha":"0b8c661e95dbe6d0924de295917155465d81b81c","user":{"login":"imagej","id":1268233,"avatar_url":"https://avatars.githubusercontent.com/u/1268233?v=3","gravatar_id":"","url":"https://api.github.com/users/imagej","html_url":"https://github.com/imagej","followers_url":"https://api.github.com/users/imagej/followers","following_url":"https://api.github.com/users/imagej/following{/other_user}","gists_url":"https://api.github.com/users/imagej/gists{/gist_id}","starred_url":"https://api.github.com/users/imagej/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/imagej/subscriptions","organizations_url":"https://api.github.com/users/imagej/orgs","repos_url":"https://api.github.com/users/imagej/repos","events_url":"https://api.github.com/users/imagej/events{/privacy}","received_events_url":"https://api.github.com/users/imagej/received_events","type":"Organization","site_admin":false},"repo":{"id":17508889,"name":"imagej-ops","full_name":"imagej/imagej-ops","owner":{"login":"imagej","id":1268233,"avatar_url":"https://avatars.githubusercontent.com/u/1268233?v=3","gravatar_id":"","url":"https://api.github.com/users/imagej","html_url":"https://github.com/imagej","followers_url":"https://api.github.com/users/imagej/followers","following_url":"https://api.github.com/users/imagej/following{/other_user}","gists_url":"https://api.github.com/users/imagej/gists{/gist_id}","starred_url":"https://api.github.com/users/imagej/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/imagej/subscriptions","organizations_url":"https://api.github.com/users/imagej/orgs","repos_url":"https://api.github.com/users/imagej/repos","events_url":"https://api.github.com/users/imagej/events{/privacy}","received_events_url":"https://api.github.com/users/imagej/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/imagej/imagej-ops","description":"ImageJ Ops: \"Write once, run anywhere\" image processing","fork":false,"url":"https://api.github.com/repos/imagej/imagej-ops","forks_url":"https://api.github.com/repos/imagej/imagej-ops/forks","keys_url":"https://api.github.com/repos/imagej/imagej-ops/keys{/key_id}","collaborators_url":"https://api.github.com/repos/imagej/imagej-ops/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/imagej/imagej-ops/teams","hooks_url":"https://api.github.com/repos/imagej/imagej-ops/hooks","issue_events_url":"https://api.github.com/repos/imagej/imagej-ops/issues/events{/number}","events_url":"https://api.github.com/repos/imagej/imagej-ops/events","assignees_url":"https://api.github.com/repos/imagej/imagej-ops/assignees{/user}","branches_url":"https://api.github.com/repos/imagej/imagej-ops/branches{/branch}","tags_url":"https://api.github.com/repos/imagej/imagej-ops/tags","blobs_url":"https://api.github.com/repos/imagej/imagej-ops/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/imagej/imagej-ops/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/imagej/imagej-ops/git/refs{/sha}","trees_url":"https://api.github.com/repos/imagej/imagej-ops/git/trees{/sha}","statuses_url":"https://api.github.com/repos/imagej/imagej-ops/statuses/{sha}","languages_url":"https://api.github.com/repos/imagej/imagej-ops/languages","stargazers_url":"https://api.github.com/repos/imagej/imagej-ops/stargazers","contributors_url":"https://api.github.com/repos/imagej/imagej-ops/contributors","subscribers_url":"https://api.github.com/repos/imagej/imagej-ops/subscribers","subscription_url":"https://api.github.com/repos/imagej/imagej-ops/subscription","commits_url":"https://api.github.com/repos/imagej/imagej-ops/commits{/sha}","git_commits_url":"https://api.github.com/repos/imagej/imagej-ops/git/commits{/sha}","comments_url":"https://api.github.com/repos/imagej/imagej-ops/comments{/number}","issue_comment_url":"https://api.github.com/repos/imagej/imagej-ops/issues/comments{/number}","contents_url":"https://api.github.com/repos/imagej/imagej-ops/contents/{+path}","compare_url":"https://api.github.com/repos/imagej/imagej-ops/compare/{base}...{head}","merges_url":"https://api.github.com/repos/imagej/imagej-ops/merges","archive_url":"https://api.github.com/repos/imagej/imagej-ops/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/imagej/imagej-ops/downloads","issues_url":"https://api.github.com/repos/imagej/imagej-ops/issues{/number}","pulls_url":"https://api.github.com/repos/imagej/imagej-ops/pulls{/number}","milestones_url":"https://api.github.com/repos/imagej/imagej-ops/milestones{/number}","notifications_url":"https://api.github.com/repos/imagej/imagej-ops/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/imagej/imagej-ops/labels{/name}","releases_url":"https://api.github.com/repos/imagej/imagej-ops/releases{/id}","deployments_url":"https://api.github.com/repos/imagej/imagej-ops/deployments","created_at":"2014-03-07T09:19:29Z","updated_at":"2016-05-17T05:13:38Z","pushed_at":"2016-06-14T21:41:23Z","git_url":"git://github.com/imagej/imagej-ops.git","ssh_url":"git@github.com:imagej/imagej-ops.git","clone_url":"https://github.com/imagej/imagej-ops.git","svn_url":"https://github.com/imagej/imagej-ops","homepage":"http://imagej.net/Ops","size":12791,"stargazers_count":13,"watchers_count":13,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":18,"mirror_url":null,"open_issues_count":86,"forks":18,"open_issues":86,"watchers":13,"default_branch":"master"}},"base":{"label":"imagej:master","ref":"master","sha":"5aea43efbdef89eea7f60bf744e03a53025205e9","user":{"login":"imagej","id":1268233,"avatar_url":"https://avatars.githubusercontent.com/u/1268233?v=3","gravatar_id":"","url":"https://api.github.com/users/imagej","html_url":"https://github.com/imagej","followers_url":"https://api.github.com/users/imagej/followers","following_url":"https://api.github.com/users/imagej/following{/other_user}","gists_url":"https://api.github.com/users/imagej/gists{/gist_id}","starred_url":"https://api.github.com/users/imagej/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/imagej/subscriptions","organizations_url":"https://api.github.com/users/imagej/orgs","repos_url":"https://api.github.com/users/imagej/repos","events_url":"https://api.github.com/users/imagej/events{/privacy}","received_events_url":"https://api.github.com/users/imagej/received_events","type":"Organization","site_admin":false},"repo":{"id":17508889,"name":"imagej-ops","full_name":"imagej/imagej-ops","owner":{"login":"imagej","id":1268233,"avatar_url":"https://avatars.githubusercontent.com/u/1268233?v=3","gravatar_id":"","url":"https://api.github.com/users/imagej","html_url":"https://github.com/imagej","followers_url":"https://api.github.com/users/imagej/followers","following_url":"https://api.github.com/users/imagej/following{/other_user}","gists_url":"https://api.github.com/users/imagej/gists{/gist_id}","starred_url":"https://api.github.com/users/imagej/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/imagej/subscriptions","organizations_url":"https://api.github.com/users/imagej/orgs","repos_url":"https://api.github.com/users/imagej/repos","events_url":"https://api.github.com/users/imagej/events{/privacy}","received_events_url":"https://api.github.com/users/imagej/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/imagej/imagej-ops","description":"ImageJ Ops: \"Write once, run anywhere\" image processing","fork":false,"url":"https://api.github.com/repos/imagej/imagej-ops","forks_url":"https://api.github.com/repos/imagej/imagej-ops/forks","keys_url":"https://api.github.com/repos/imagej/imagej-ops/keys{/key_id}","collaborators_url":"https://api.github.com/repos/imagej/imagej-ops/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/imagej/imagej-ops/teams","hooks_url":"https://api.github.com/repos/imagej/imagej-ops/hooks","issue_events_url":"https://api.github.com/repos/imagej/imagej-ops/issues/events{/number}","events_url":"https://api.github.com/repos/imagej/imagej-ops/events","assignees_url":"https://api.github.com/repos/imagej/imagej-ops/assignees{/user}","branches_url":"https://api.github.com/repos/imagej/imagej-ops/branches{/branch}","tags_url":"https://api.github.com/repos/imagej/imagej-ops/tags","blobs_url":"https://api.github.com/repos/imagej/imagej-ops/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/imagej/imagej-ops/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/imagej/imagej-ops/git/refs{/sha}","trees_url":"https://api.github.com/repos/imagej/imagej-ops/git/trees{/sha}","statuses_url":"https://api.github.com/repos/imagej/imagej-ops/statuses/{sha}","languages_url":"https://api.github.com/repos/imagej/imagej-ops/languages","stargazers_url":"https://api.github.com/repos/imagej/imagej-ops/stargazers","contributors_url":"https://api.github.com/repos/imagej/imagej-ops/contributors","subscribers_url":"https://api.github.com/repos/imagej/imagej-ops/subscribers","subscription_url":"https://api.github.com/repos/imagej/imagej-ops/subscription","commits_url":"https://api.github.com/repos/imagej/imagej-ops/commits{/sha}","git_commits_url":"https://api.github.com/repos/imagej/imagej-ops/git/commits{/sha}","comments_url":"https://api.github.com/repos/imagej/imagej-ops/comments{/number}","issue_comment_url":"https://api.github.com/repos/imagej/imagej-ops/issues/comments{/number}","contents_url":"https://api.github.com/repos/imagej/imagej-ops/contents/{+path}","compare_url":"https://api.github.com/repos/imagej/imagej-ops/compare/{base}...{head}","merges_url":"https://api.github.com/repos/imagej/imagej-ops/merges","archive_url":"https://api.github.com/repos/imagej/imagej-ops/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/imagej/imagej-ops/downloads","issues_url":"https://api.github.com/repos/imagej/imagej-ops/issues{/number}","pulls_url":"https://api.github.com/repos/imagej/imagej-ops/pulls{/number}","milestones_url":"https://api.github.com/repos/imagej/imagej-ops/milestones{/number}","notifications_url":"https://api.github.com/repos/imagej/imagej-ops/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/imagej/imagej-ops/labels{/name}","releases_url":"https://api.github.com/repos/imagej/imagej-ops/releases{/id}","deployments_url":"https://api.github.com/repos/imagej/imagej-ops/deployments","created_at":"2014-03-07T09:19:29Z","updated_at":"2016-05-17T05:13:38Z","pushed_at":"2016-06-14T21:41:23Z","git_url":"git://github.com/imagej/imagej-ops.git","ssh_url":"git@github.com:imagej/imagej-ops.git","clone_url":"https://github.com/imagej/imagej-ops.git","svn_url":"https://github.com/imagej/imagej-ops","homepage":"http://imagej.net/Ops","size":12791,"stargazers_count":13,"watchers_count":13,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":18,"mirror_url":null,"open_issues_count":86,"forks":18,"open_issues":86,"watchers":13,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/imagej/imagej-ops/pulls/408"},"html":{"href":"https://github.com/imagej/imagej-ops/pull/408"},"issue":{"href":"https://api.github.com/repos/imagej/imagej-ops/issues/408"},"comments":{"href":"https://api.github.com/repos/imagej/imagej-ops/issues/408/comments"},"review_comments":{"href":"https://api.github.com/repos/imagej/imagej-ops/pulls/408/comments"},"review_comment":{"href":"https://api.github.com/repos/imagej/imagej-ops/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/imagej/imagej-ops/pulls/408/commits"},"statuses":{"href":"https://api.github.com/repos/imagej/imagej-ops/statuses/0b8c661e95dbe6d0924de295917155465d81b81c"}}}}
{"actor":{"display_login":"dietzc"}}