<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.2 20190208//EN" "http://jats.nlm.nih.gov/publishing/1.2/JATS-journalpublishing1.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="other" dtd-version="1.2" xml:lang="en">
    <front>
        <journal-meta>
            <journal-id journal-id-type="pmc">F1000Research</journal-id>
            <journal-title-group>
                <journal-title>F1000Research</journal-title>
            </journal-title-group>
            <issn pub-type="epub">2046-1402</issn>
            <publisher>
                <publisher-name>F1000 Research Limited</publisher-name>
                <publisher-loc>London, UK</publisher-loc>
            </publisher>
        </journal-meta>
        <article-meta>
            <article-id pub-id-type="doi">10.12688/f1000research.15144.1</article-id>
            <article-categories>
                <subj-group subj-group-type="heading">
                    <subject>Software Tool Article</subject>
                </subj-group>
                <subj-group>
                    <subject>Articles</subject>
                </subj-group>
            </article-categories>
            <title-group>
                <article-title>Copycat Layout: Network layout alignment via Cytoscape Automation</article-title>
                <fn-group content-type="pub-status">
                    <fn>
                        <p>[version 1; peer review: 2 approved]</p>
                    </fn>
                </fn-group>
            </title-group>
            <contrib-group>
                <contrib contrib-type="author" corresp="no">
                    <name>
                        <surname>Settle</surname>
                        <given-names>Brett</given-names>
                    </name>
                    <role content-type="http://credit.niso.org/">Investigation</role>
                    <role content-type="http://credit.niso.org/">Software</role>
                    <role content-type="http://credit.niso.org/">Validation</role>
                    <role content-type="http://credit.niso.org/">Writing &#x2013; Original Draft Preparation</role>
                    <role content-type="http://credit.niso.org/">Writing &#x2013; Review &amp; Editing</role>
                    <uri content-type="orcid">https://orcid.org/0000-0002-6776-2603</uri>
                    <xref ref-type="aff" rid="a1">1</xref>
                </contrib>
                <contrib contrib-type="author" corresp="no">
                    <name>
                        <surname>Otasek</surname>
                        <given-names>David</given-names>
                    </name>
                    <role content-type="http://credit.niso.org/">Methodology</role>
                    <role content-type="http://credit.niso.org/">Software</role>
                    <role content-type="http://credit.niso.org/">Validation</role>
                    <role content-type="http://credit.niso.org/">Writing &#x2013; Review &amp; Editing</role>
                    <xref ref-type="aff" rid="a1">1</xref>
                </contrib>
                <contrib contrib-type="author" corresp="no">
                    <name>
                        <surname>Morris</surname>
                        <given-names>John H</given-names>
                    </name>
                    <role content-type="http://credit.niso.org/">Investigation</role>
                    <role content-type="http://credit.niso.org/">Methodology</role>
                    <role content-type="http://credit.niso.org/">Software</role>
                    <uri content-type="orcid">https://orcid.org/0000-0003-0290-7979</uri>
                    <xref ref-type="aff" rid="a2">2</xref>
                </contrib>
                <contrib contrib-type="author" corresp="yes">
                    <name>
                        <surname>Demchak</surname>
                        <given-names>Barry</given-names>
                    </name>
                    <role content-type="http://credit.niso.org/">Conceptualization</role>
                    <role content-type="http://credit.niso.org/">Investigation</role>
                    <role content-type="http://credit.niso.org/">Methodology</role>
                    <role content-type="http://credit.niso.org/">Project Administration</role>
                    <role content-type="http://credit.niso.org/">Supervision</role>
                    <role content-type="http://credit.niso.org/">Writing &#x2013; Review &amp; Editing</role>
                    <xref ref-type="corresp" rid="c1">a</xref>
                    <xref ref-type="aff" rid="a1">1</xref>
                </contrib>
                <aff id="a1">
                    <label>1</label>Department of Medicine, University of California, San Diego, California, 92093-0688, USA</aff>
                <aff id="a2">
                    <label>2</label>University of California San Francisco, San Francisco, California, 94143, USA</aff>
            </contrib-group>
            <author-notes>
                <corresp id="c1">
                    <label>a</label>
                    <email xlink:href="mailto:bdemchak@ucsd.edu">bdemchak@ucsd.edu</email>
                </corresp>
                <fn fn-type="conflict">
                    <p>No competing interests were disclosed.</p>
                </fn>
            </author-notes>
            <pub-date pub-type="epub">
                <day>21</day>
                <month>6</month>
                <year>2018</year>
            </pub-date>
            <pub-date pub-type="collection">
                <year>2018</year>
            </pub-date>
            <volume>7</volume>
            <elocation-id>822</elocation-id>
            <history>
                <date date-type="accepted">
                    <day>12</day>
                    <month>6</month>
                    <year>2018</year>
                </date>
            </history>
            <permissions>
                <copyright-statement>Copyright: &#x00a9; 2018 Settle B et al.</copyright-statement>
                <copyright-year>2018</copyright-year>
                <license xlink:href="https://creativecommons.org/licenses/by/4.0/">
                    <license-p>This is an open access article distributed under the terms of the Creative Commons Attribution Licence, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
                </license>
            </permissions>
            <self-uri content-type="pdf" xlink:href="https://f1000research.com/articles/7-822/pdf"/>
            <abstract>
                <p>The copycatLayout app is a network-based visual differential analysis tool that improves upon the existing layoutSaver app and is delivered pre-installed with Cytoscape, beginning with v3.6.0. LayoutSaver cloned a network layout by mapping node locations from one network to another based on node attribute values, but failed to clone view scale and location, and provided no means of identifying which nodes were successfully mapped between networks. Copycat addresses these issues and provides additional layout options.</p>
                <p>With the advent of Cytoscape Automation (packaged in Cytoscape v3.6.0), researchers can utilize the Copycat layout and its output in workflows written in their language of choice by using only a few simple REST calls. Copycat enables researchers to visually compare groups of homologous genes, generate network comparison images for publications, and quickly identify differences between similar networks at a glance without leaving their script. With a few extra REST calls, scripts can discover nodes present in one network but not in the other, which can feed into more complex analyses (e.g., modifying mismatched nodes based on new data, then re-running the layout to highlight additional network changes).</p>
            </abstract>
            <kwd-group kwd-group-type="author">
                <kwd>Workflow</kwd>
                <kwd>Reproducibility</kwd>
                <kwd>Cytoscape</kwd>
                <kwd>Interoperability</kwd>
                <kwd>REST</kwd>
                <kwd>Microservice</kwd>
                <kwd>Layout</kwd>
                <kwd>Alignment</kwd>
            </kwd-group>
            <funding-group>
                <award-group id="fund-1">
                    <funding-source>National Resource for Network Biology</funding-source>
                    <award-id>P41GM103504</award-id>
                </award-group>
                <award-group id="fund-2" xlink:href="http://dx.doi.org/10.13039/100000057">
                    <funding-source>National Institute of General Medical Sciences</funding-source>
                    <award-id>R01GM070743</award-id>
                </award-group>
                <funding-statement>This work was supported with funding from the National Resource for Network Biology (NRNB) under award number P41 GM103504 and the National Institute of General Medical Sciences (NIGMS) under award number R01 GM070743, both assigned to Trey Ideker.</funding-statement>
                <funding-statement>
                    <italic>The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript.</italic>
                </funding-statement>
            </funding-group>
        </article-meta>
    </front>
    <body>
        <sec sec-type="intro">
            <title>Introduction</title>
            <p>The copycatLayout app
                <sup>
                    <xref ref-type="bibr" rid="ref-1">1</xref>
                </sup> (hereafter &#x201c;Copycat&#x201d;) is an evolution of the existing layoutSaver app
                <sup>
                    <xref ref-type="bibr" rid="ref-2">2</xref>
                </sup>, a visual network aligner that maps node locations from one network view (called the source) to another (called the target). Copycat aims to enable Cytoscape users to compare and contrast networks by highlighting and arranging nodes not common to both networks, and by showing both networks using the same layout, scale and placement.</p>
            <p>We upgraded Copycat to enable Cytoscape Automation
                <sup>
                    <xref ref-type="bibr" rid="ref-3">3</xref>
                </sup> by exposing a new REST endpoint
                <sup>
                    <xref ref-type="bibr" rid="ref-4">4</xref>,
                    <xref ref-type="bibr" rid="ref-5">5</xref>
                </sup>, thereby bringing the power of network-based differential analysis to automation scripts. Cytoscape Automation enables biologists to incorporate Cytoscape network visualization and analysis functionality (via REST calls) into workflows written in a language in which they are already productive (e.g., Python and R).</p>
            <p>For example, as Cytoscape is called to transform a network (the 
                <italic toggle="yes">target</italic>), it&#x2019;s often important to be able to show a correspondence to an original network (the 
                <italic toggle="yes">source</italic>). The Copycat endpoint does this by invoking the Copycat layout to make common and disjoint nodes obvious and easily available to a workflow. In a workflow that performs multiple network transformations, Copycat can be used to pinpoint network differences after each transformation, thereby boosting confidence in the transformation and illuminating its real effect. 
                <xref ref-type="fig" rid="f1">Figure 1</xref> illustrates a workflow that might call Copycat repeatedly to create a frame-by-frame movie of network manipulation.</p>
            <fig fig-type="figure" id="f1" orientation="portrait" position="float">
                <label>Figure 1. </label>
                <caption>
                    <title>A workflow in which transformations are documented by applying Copycat.</title>
                    <p>(a) The starting network is loaded into Cytoscape and a simple layout is applied. (b) Data-derived subnetwork. (c) Copycat layout is applied, mapping the starting network layout onto the subnetwork and selecting the unmapped node that was not found in the source.</p>
                </caption>
                <graphic orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/16498/b6d5b594-13e9-4d04-a825-6cc4b257e5bf_figure1.gif"/>
            </fig>
            <p>As another example, applying Copycat layout to similar networks (i.e., rat, mouse or human) and mapping nodes by homology assignments can help verify and discover new homologous genes and gene pairs. Unmapped nodes might be useful in predicting gene positions based on successfully mapped neighbors.</p>
            <p>In this paper, the Implementation section describes the general approach of the Copycat layout and its REST endpoint. The Operation section describes how to call the endpoint as either a Cytoscape Automation Function or Command. The Use Case section demonstrates the Copycat endpoint use in a real workflow, and the Discussion section describes the layout performance.</p>
        </sec>
        <sec sec-type="methods">
            <title>Methods</title>
            <sec>
                <title>Implementation</title>
                <p>The Copycat endpoint operates on two Cytoscape network views, where a source view contains a source network, and a target view contains a target network. The source view acts as a reference for laying out nodes in the target view.</p>
                <p>Copycat matches nodes in a source view to nodes in a target view based on a common node attribute value. For each match, it sets the target node&#x2019;s X Location, Y Location and Z Location visual attributes to those of the source node. For each source node, the attribute value is found in a column of the source network table, and likewise for each target node. (While the columns themselves may be different, they are assumed to have the same type and meaning.)</p>
                <p>Copycat implements a multi-pass algorithm where the first pass creates a map of source node attributes to source view coordinates. The second pass searches for target node attribute values in the source node attribute map and sets the target node&#x2019;s view coordinates when an attribute match is found.</p>
                <p>A node attribute value in the source column is considered to match a value in the target column if they are lexicographically equal. Note that a poor choice of mapping attributes can lead to confusing layouts. For example, when multiple target nodes match a single source node, all of the matching target nodes will be stacked on top of each other at the coordinates of the source node. Also, if a target node matches multiple source nodes, only the last encountered source mapping is used. To avoid visual confusion, avoid having multiple nodes associated with the same attribute value. (A good choice for a mapping attribute is the node&#x2019;s name if each node has a different name. A bad choice could be a node&#x2019;s in-degree if multiple nodes have the same in-degree.)</p>
                <p>Optionally, Copycat sets the 
                    <italic toggle="yes">selected</italic> attribute for source nodes that aren&#x2019;t mapped and for target nodes whose attributes aren&#x2019;t found in the source node map, as shown in 
                    <xref ref-type="fig" rid="f2">Figure 2</xref>. (The caller can subsequently query and act upon selected source and target nodes using other CyREST endpoints). Also optionally, unmapped target nodes are laid out in a grid in the top right portion of the target view.</p>
                <fig fig-type="figure" id="f2" orientation="portrait" position="float">
                    <label>Figure 2. </label>
                    <caption>
                        <title>Calling Copycat layout on a derived subnetwork with the 
                            <italic toggle="yes">selectUnmapped</italic> parameter set to false.</title>
                        <p>After the Copycat layout, the target network nodes have the same coordinates as the corresponding source network nodes. Because the node H in the source and nodes N and O in the target are unmatched, they are selected.</p>
                    </caption>
                    <graphic orientation="portrait" position="float" xlink:href="https://f1000research-files.f1000.com/manuscripts/16498/b6d5b594-13e9-4d04-a825-6cc4b257e5bf_figure2.gif"/>
                </fig>
            </sec>
            <sec>
                <title>Operation</title>
                <p>Copycat exposes a single endpoint with both a Commands and Functions
                    <sup>
                        <xref ref-type="bibr" rid="ref-6">6</xref>
                    </sup> variant, each with similar parameters. While both variants perform the same layout, Commands are most conveniently used in conjunction with the Cytoscape scripting facilities, and Functions are most convenient for calls from scripting languages such as Python and R.</p>
                <p>Generally, the caller specifies the Cytoscape views containing the source and target networks (called 
                    <bold>sourceViewSUID</bold> and 
                    <bold>targetViewSUID</bold>) and provides the name of the mapping column in the source network (called 
                    <bold>sourceColumn</bold>) and target network (called 
                    <bold>targetColumn</bold>). It can control whether unmapped nodes are selected (called 
                    <bold>selectUnmapped</bold>) or the unmapped nodes are laid out in a grid (called 
                    <bold>gridUnmapped</bold>).</p>
                <p>Note that the caller can determine columns available for a network via a CyREST endpoint, such as 
                    <bold>/v1/networks/{networkId}/tables/defaultnode/columns</bold>.</p>
                <p>Note that the source and target columns must both be either string types or integer types.</p>
                <p>The Copycat endpoint returns a CIResponse
                    <sup>
                        <xref ref-type="bibr" rid="ref-7">7</xref>
                    </sup> according to Cytoscape Automation best practices. If the call succeeds, the CIResponse contains a layout result object (as the 
                    <bold>data</bold> element); otherwise, it contains an explanation of the error (as the 
                    <bold>errors</bold> element):</p>
                <p>
                    <preformat orientation="portrait" position="float" preformat-type="computer code" xml:space="preserve">
                        <styled-content style="font-size:15px;">     {
       "data": {"mappedNodeCount": integer,
                "unmappedNodeCount": integer
       },
       "errors": []
     }</styled-content>
                    </preformat>
                </p>
                <p>The 
                    <bold>mappedNodeCount</bold> value contains the number of target nodes successfully mapped, and the 
                    <bold>unmappedNodeCount</bold> contains the number of target nodes that did not correspond to a source node.  To calculate the number of unmapped source nodes, the user can execute a GET request at 
                    <bold>/networks/{networkSUID}/nodes/selected</bold> and get the length of the list returned.</p>
                <p>If either of the network views cannot be resolved by the given SUIDs or the mapping columns cannot be found in the node table of the source and target network, the 
                    <bold>errors[0].status</bold> element returns 404, and the remainder of the 
                    <bold>errors[0]</bold> element contains additional information.</p>
                <p>To apply Copycat Layout to a network, you must be running Cytoscape version 3.6.0 or later with at least 512MB of free memory.</p>
                <p>
                    <italic toggle="yes">
                        <bold>Copycat as a Function.</bold>
                    </italic> The Functions endpoint is documented in a Swagger page in the 
                    <bold>Layouts</bold> section available via 
                    <bold>Help &#x2192; Automation &#x2192; CyREST API</bold>.</p>
                <p>The caller must pass the 
                    <bold>SourceViewSUID</bold> and 
                    <bold>targetViewSUID</bold> parameters as part of the URL (
                    <bold>/v1/apply/layouts/copycat/{sourceViewSUID}/{targetViewSUID}</bold>), and the remaining parameters in a JSON payload object:</p>
                <p>
                    <preformat orientation="portrait" position="float" preformat-type="computer code" xml:space="preserve">
                        <styled-content style="font-size:15px;">     {
       &#x201c;sourceColumn&#x201d;: string, // 
                            <italic toggle="yes">defaults to</italic> &#x201c;
                            <italic toggle="yes">name</italic>&#x201d;
       &#x201c;targetColumn&#x201d;: string, // 
                            <italic toggle="yes">defaults to</italic> &#x201c;
                            <italic toggle="yes">name</italic>&#x201d;
       &#x201c;selectUnmapped&#x201d; : boolean,
       &#x201c;gridUnmapped&#x201d; : boolean
     }</styled-content>
                    </preformat>
                </p>
                <p>Note that unlike other layout REST endpoints, the Copycat Function requires an HTTP PUT request because it consumes a JSON payload with extra parameters -- the other CyREST layout endpoints require GET requests with optional parameters directly in the URL.</p>
                <p>Note that the 
                    <bold>sourceViewSUID</bold> and 
                    <bold>targetViewSUID</bold> must be either integers or the word &#x201c;current&#x201d; (meaning the view currently selected in Cytoscape). The caller can determine a network view&#x2019;s SUID via a number of CyREST endpoints, including 
                    <bold>/v1/networks/views/currentNetworkView</bold>. The 
                    <bold>sourceViewSUID</bold> and 
                    <bold>targetViewSUID</bold> must reference different views.</p>
                <p>Example code is provided in R, Python and as a Bash curl, but can easily be adapted into any language that supports REST calls. (Note that you must determine the values of sourceViewSUID and targetViewSUID independently ahead of these calls.)</p>
                <p>
                    <bold>R</bold>
                </p>
                <p>
                    <preformat orientation="portrait" position="float" preformat-type="computer code" xml:space="preserve">
                        <styled-content style="font-size:15px;color:#999988;font-style:italic"># Basic settings for cyREST</styled-content>

                        <styled-content style="font-size:15px;">port.number =</styled-content> 
                        <styled-content style="font-size:15px;color:#008080;">1234</styled-content>

                        <styled-content style="font-size:15px;">base.url = paste(</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144;">"http://localhost:"</styled-content>
                        <styled-content style="font-size:15px;">, toString(port.number),</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144;">"/v1"</styled-content>
                        <styled-content style="font-size:15px;">, sep=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144;">""</styled-content>
                        <styled-content style="font-size:15px;">)</styled-content>


                        <styled-content style="font-size:15px;color:#999988;font-style:italic"># Send it to Cytoscape!</styled-content>

                        <styled-content style="font-size:15px;">copycat.url = paste(base.url,</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144;">"apply"</styled-content>
                        <styled-content style="font-size:15px;">,</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144;">"layouts"</styled-content>
                        <styled-content style="font-size:15px;">,</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144;">"copycat"</styled-content>
                        <styled-content style="font-size:15px;">,</styled-content>

                        <styled-content style="font-size:15px;">sourceViewSUID, targetViewSUID, sep=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144;">"/"</styled-content>
                        <styled-content style="font-size:15px;">)</styled-content>

                        <styled-content style="font-size:15px;">copycat.args = list(sourceColumn=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144;">"name"</styled-content>
                        <styled-content style="font-size:15px;">, targetColumn=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144;">"name"</styled-content>
                        <styled-content style="font-size:15px;">,</styled-content>

                        <styled-content style="font-size:15px;">selectUnmapped=</styled-content>
                        <styled-content style="font-size:15px;color:#008080;">TRUE</styled-content>
                        <styled-content style="font-size:15px;">)</styled-content>

                        <styled-content style="font-size:15px;">copycat.JSON = toJSON(copycat.args)</styled-content>

                        <styled-content style="font-size:15px;">res &lt;- PUT(url=copycat.url, body=copycat.JSON, encode=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144;">"json"</styled-content>
                        <styled-content style="font-size:15px;">)</styled-content>
                    </preformat>
                </p>
                <p>
                    <bold>Python</bold>
                </p>
                <p>
                    <preformat orientation="portrait" position="float" preformat-type="computer code" xml:space="preserve">
                        <styled-content style="font-size:15px;font-weight:bold">import</styled-content> 
                        <styled-content style="font-size:15px;">requests, json</styled-content>

                        <styled-content style="font-size:15px;">resp =</styled-content> 
                        <styled-content style="font-size:15px;">requests.put(</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144;">"localhost:1234/v1/apply/layouts/copycat/{}/{}"</styled-content>
                        <styled-content style="font-size:15px;">.format(sourceViewSUID, 
targetViewSUID), data=json.dumps(data))</styled-content>

                        <styled-content style="font-size:15px;">resp = resp.json()</styled-content>
                    </preformat>
                </p>
                <p>
                    <bold>Bash</bold>
                </p>
                <p>
                    <preformat orientation="portrait" position="float" preformat-type="computer code" xml:space="preserve">
                        <styled-content style="font-size:15px;font-weight:bold">curl -X PUT --header</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144;font-weight:bold">'Content-Type: application/json'</styled-content> 
                        <styled-content style="font-size:15px;font-weight:bold">--header</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144;font-weight:bold">'Accept:</styled-content>

                        <styled-content style="font-size:15px;color:#DD1144;font-weight:bold">application/json'</styled-content> 
                        <styled-content style="font-size:15px;font-weight:bold">-d</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144;font-weight:bold">'{ \</styled-content>

                        <styled-content style="font-size:15px;color:#DD1144;font-weight:bold">   "sourceColumn": "name", \</styled-content>

                        <styled-content style="font-size:15px;color:#DD1144;font-weight:bold">   "targetColumn": "name", \</styled-content>

                        <styled-content style="font-size:15px;color:#DD1144;font-weight:bold">   "selectUnmapped": true, \</styled-content>

                        <styled-content style="font-size:15px;color:#DD1144;font-weight:bold">   "gridUnmapped": false \</styled-content>

                        <styled-content style="font-size:15px;color:#DD1144;font-weight:bold"> }'</styled-content>

                        <styled-content style="font-size:15px;color:#DD1144;font-weight:bold">'http://localhost:1234/v1/apply/layouts/copycat/${sourceViewSUID}/${targetViewSUID}'</styled-content>
                    </preformat>
                </p>
                <p>
                    <italic toggle="yes">
                        <bold>Copycat as a Command.</bold>
                    </italic> The Commands version is documented in the Swagger page reachable from Cytoscape&#x2019;s 
                    <bold>Help &#x2192; Automation &#x2192; CyREST Command API</bold> and can be found in the 
                    <bold>layouts</bold> section. Commands are executable via the Cytoscape Command Tool
                    <sup>
                        <xref ref-type="bibr" rid="ref-8">8</xref>
                    </sup> as well as the CyREST Commands API.</p>
                <p>The caller must pass the 
                    <bold>sourceViewSUID</bold> and 
                    <bold>targetViewSUID</bold> as part of the payload object instead of the URL. They must be the name of a network (e.g., &#x201c;galFiltered.sif&#x201d;) instead of an SUID integer; Copycat will operate on the primary view for the network.</p>
                <p>Note that like other layout Command REST endpoints, the Copycat Function requires an HTTP POST request.</p>
                <p>Note that with the current CyREST Commands, it is difficult to query Cytoscape to find the name of a network. The caller must know the name in advance, likely as a result of creating or naming it by using a different Command prior to the Copycat call (e.g., 
                    <bold>/v1/commands/network/create empty</bold>).</p>
                <p>Example code is provided in R, Python and as a Bash curl, but can easily be adapted into any language that supports REST calls. (Note that you must determine the values of 
                    <bold>sourceNetworkName</bold> and 
                    <bold>targetNetworkName</bold> independently ahead of these calls.)</p>
                <p>
                    <bold>R</bold>
                </p>
                <p>
                    <preformat orientation="portrait" position="float" preformat-type="computer code" xml:space="preserve">
                        <styled-content style="font-size:15px;color:#999988;font-style:italic"># Basic settings for cyREST</styled-content>

                        <styled-content style="font-size:15px">port.number =</styled-content> 
                        <styled-content style="font-size:15px;color:#008080">1234</styled-content>

                        <styled-content style="font-size:15px">base.url = paste(</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">"http://localhost:"</styled-content>
                        <styled-content style="font-size:15px">, toString(port.number),</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144">"/v1"</styled-content>
                        <styled-content style="font-size:15px">, sep=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">""</styled-content>
                        <styled-content style="font-size:15px">)</styled-content>


                        <styled-content style="font-size:15px;color:#999988;font-style:italic"># Send it to Cytoscape!</styled-content>

                        <styled-content style="font-size:15px">copycat.url = paste(base.url,</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144">"commands"</styled-content>
                        <styled-content style="font-size:15px">,</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144">"layout"</styled-content>
                        <styled-content style="font-size:15px">,</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144">"copycat"</styled-content>
                        <styled-content style="font-size:15px">, sep=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">"/"</styled-content>
                        <styled-content style="font-size:15px">)
copycat.args = list(sourceNetwork=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">"sourceNetworkName"</styled-content>
                        <styled-content style="font-size:15px">, sourceColumn=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">"name"</styled-content>
                        <styled-content style="font-size:15px">, 
targetNetwork=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">"targetNetworkName"</styled-content>
                        <styled-content style="font-size:15px">, targetColumn=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">"name"</styled-content>
                        <styled-content style="font-size:15px">, selectUnmapped=</styled-content>
                        <styled-content style="font-size:15px;color:#008080">TRUE</styled-content>
                        <styled-content style="font-size:15px">)
copycat.JSON = toJSON(copycat.args)
res &lt;- PUT(url=copycat.url, body=copycat.JSON, encode=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">"json"</styled-content>
                        <styled-content style="font-size:15px">)</styled-content>
                    </preformat>
                </p>
                <p>
                    <bold>Python</bold>
                </p>
                <p>
                    <preformat orientation="portrait" position="float" preformat-type="computer code" xml:space="preserve">
                        <styled-content style="font-size:15px;font-weight:bold">import</styled-content> 
                        <styled-content style="font-size:15px;">requests, json
resp = requests.put</styled-content>(
                        <styled-content style="font-size:15px;color:#DD1144">"localhost:1234/v1/commands/layout/copycat"</styled-content>
                        <styled-content style="font-size:15px">, data = json.dumps(data))
resp = resp.json()</styled-content>
                    </preformat>
                </p>
                <p>
                    <bold>Bash</bold>
                </p>
                <p>
                    <preformat orientation="portrait" position="float" preformat-type="computer code" xml:space="preserve">
                        <styled-content style="font-size:15px">curl -X POST --header</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144">'Content-Type: application/json'</styled-content> 
                        <styled-content style="font-size:15px">--header</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144">'Accept:application/json'</styled-content> 
                        <styled-content style="font-size:15px">-d</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144">'{\ 
   "gridUnmapped": "true", \ 
   "selectUnmapped": "true", \ 
   "sourceColumn": "name", \ 
   "sourceNetwork": "sourceNetworkName", \ 
   "targetColumn": "name", \ 
   "targetNetwork": "targetNetworkName" \ 
 }' 'http://localhost:1234/v1/commands/layout/copycat'</styled-content>
                    </preformat>
                </p>
                <p>Additionally, the Copycat Command can be executed directly via the Cytoscape Command Tool or as part of a Cytoscape Command script as shown below, where each parameter is specified using a key-value pair. Optional parameters can be specified by appending additional key-value pairs.</p>
                <p>layout copycat sourceNetwork={sourceNetworkName} targetNetwork={targetNetworkName}</p>
            </sec>
            <sec>
                <title>Use case</title>
                <p>Many biological analyses rely on performing differential analysis on derived subnetworks. In the case of inferring gene regulatory networks
                    <sup>
                        <xref ref-type="bibr" rid="ref-9">9</xref>
                    </sup>, it is beneficial to show mutations at each time-step without touching the unchanged parts of the network. Identifying and visualizing the changes over time is much easier with Cytoscape Automation. After loading networks into Cytoscape, the CyREST API can be used to fetch the SUID of networks and views, and the names of columns in the node table.  What follows are some of the essential steps for this kind of analysis.</p>
                <p>
                    <preformat orientation="portrait" position="float" preformat-type="computer code" xml:space="preserve">
                        <styled-content style="font-size:15px;color:#999988;font-style:italic"># Retrieve network and view SUID from Cytoscape in Python</styled-content>

                        <styled-content style="font-size:15px">REST_PORT=</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">'1234'</styled-content> 
                        <styled-content style="font-size:15px;color:#999988;font-style:italic"># Set to whatever rest.port is in Cytoscape preferences</styled-content>

                        <styled-content style="font-size:15px">REST_ENDPOINT =</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144">"http://localhost:{}/v1"</styled-content>
                        <styled-content style="font-size:15px">.format(REST_PORT)

resp = requests.get(REST_ENDPOINT +</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144">"/networks"</styled-content>
                        <styled-content style="font-size:15px">)
network_suids = resp.json()
suid_map = {</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">'source'</styled-content>
                        <styled-content style="font-size:15px">: {</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">'suid'</styled-content>
                        <styled-content style="font-size:15px">: network_suids[</styled-content>
                        <styled-content style="font-size:15px;color:#008080">0</styled-content>
                        <styled-content style="font-size:15px">]},</styled-content> 
                        <styled-content style="font-size:15px;color:#DD1144">'target'</styled-content>
                        <styled-content style="font-size:15px">: {</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">'suid'</styled-content>
                        <styled-content style="font-size:15px">:network_suids[</styled-content>
                        <styled-content style="font-size:15px;color:#008080">1</styled-content>
                        <styled-content style="font-size:15px">]}}</styled-content>


                        <styled-content style="font-size:15px">resp = requests.get(</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">"{}/networks/{}/views"</styled-content>
                        <styled-content style="font-size:15px">.format(REST_ENDPOINT,
suid_map[</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">'source'</styled-content>
                        <styled-content style="font-size:15px">][</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">'suid'</styled-content>
                        <styled-content style="font-size:15px">]))
suid_map[</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">'source'</styled-content>
                        <styled-content style="font-size:15px">][</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">'view_suid'</styled-content>
                        <styled-content style="font-size:15px">] = resp.json()[</styled-content>
                        <styled-content style="font-size:15px;color:#008080">0</styled-content>
                        <styled-content style="font-size:15px">]</styled-content> 
                        <styled-content style="font-size:15px;color:#999988;font-style:italic"># only one view exists</styled-content>
                    </preformat>
                </p>
                <p>Insert the network view SUIDs into the sample scripts listed above to apply the Copycat layout, and the CyREST API will return the number of mapped and unmapped nodes in the target layout. Once the layout has completed, add a GET request to 
                    <bold>/networks/{SUID}/views/{viewSUID}.png</bold> to generate images of the aligned networks. Adding the 
                    <bold>selectUnmapped</bold> parameter and a few calls to the core Cytoscape network API suite allows callers to take full advantage of the layout results by getting unmapped node information.</p>
                <p>
                    <preformat orientation="portrait" position="float" preformat-type="computer code" xml:space="preserve">
                        <styled-content style="font-size:15px">resp = requests.get(</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">"{}/networks/{}/nodes/selected"</styled-content>
                        <styled-content style="font-size:15px">.format(REST_ENDPOINT,networkId))</styled-content>

                        <styled-content style="font-size:15px">nodes = []</styled-content>

                        <styled-content style="font-size:15px;font-weight:bold">for</styled-content> 
                        <styled-content style="font-size:15px">nodeId</styled-content> 
                        <styled-content style="font-size:15px;font-weight:bold">in</styled-content> 
                        <styled-content style="font-size:15px">resp.json():
    resp = requests.get(</styled-content>
                        <styled-content style="font-size:15px;color:#DD1144">"{}/networks/{}/nodes/{}"</styled-content>
                        <styled-content style="font-size:15px">.format(REST_ENDPOINT,networkId, nodeId))
    nodes.append(resp.json())</styled-content>
                    </preformat>
                </p>
                <p>The complete working example of this workflow is available in a Jupyter notebook found in the copycat-layout Github repository at 
                    <ext-link ext-link-type="uri" xlink:href="https://github.com/cytoscape/copycat-layout/blob/master/notebooks/Copycat%20Automation%20Example.ipynb">https://github.com/cytoscape/copycat-layout/blob/master/notebooks/Copycat%20Automation%20Example.ipynb</ext-link>.</p>
            </sec>
        </sec>
        <sec sec-type="discussion">
            <title>Discussion</title>
            <p>Using a hashmap to store node attributes and locations within solely the source network allows Copycat layout to run in O(N+M) time while only requiring O(N) memory, where N is the number of nodes in the source network and M is the number of nodes in the target network. Note that the layout performance is independent of the number of edges in either network, as edges are not accounted for in this algorithm.</p>
            <p>It is also important to note that the Commands endpoint is automatically generated by Cytoscape Tunables and is meant to be used via Cytoscape Command Tools, whereas the CyREST Functions are crafted by the developer specifically for use in Python- and R-based automation scripts.  For this reason, the Functions endpoint will be better documented, provide better errors, and accept more script-friendly parameters, such as SUIDs.</p>
        </sec>
        <sec>
            <title>Future plans</title>
            <p>The Copycat API follows the same Semantic Versioning
                <sup>
                    <xref ref-type="bibr" rid="ref-10">10</xref>
                </sup> best practices established by Cytoscape and CyREST, and future modifications will respect the same parameters, functionality, and expected outputs specified in this paper. CopycatLayout aims to be an integral tool for layout alignment in Cytoscape, and intends to accommodate future expectations of alignment analysis without overcomplicating the interface. By integrating repetitive use cases into the API (e.g., returning the list of unmapped node SUIDs as well as their count), we can provide better tools to researchers and greatly reduce the complexity of automation scripts.</p>
        </sec>
        <sec>
            <title>Summary</title>
            <p>In this paper, we presented the Copycat layout, a network differential analysis app for Cytoscape 3.  Copycat provides basic visual alignment functionality that will open the door to more data-centric alignment algorithms.</p>
            <p>Copycat layout is also exposed via the Cytoscape CyREST API for automation users and scripted analyses.  Copycat can be combined with other layouts and CyREST calls to better understand network transformations, and generate clean network difference figures.</p>
        </sec>
        <sec>
            <title>Data availability</title>
            <p>All data underlying the results are available as part of the article and no additional source data are required.</p>
        </sec>
        <sec>
            <title>Software availability</title>
            <p>
                <bold>The copycatLayout app is delivered as a component of Cytoscape starting with v3.6.0, and is also available on the Cytoscape App Store:</bold> 
                <ext-link ext-link-type="uri" xlink:href="http://apps.cytoscape.org/apps/copycatLayout">http://apps.cytoscape.org/apps/copycatLayout</ext-link>.</p>
            <p>
                <bold>Source code available from:</bold> 
                <ext-link ext-link-type="uri" xlink:href="https://github.com/cytoscape/copycat-layout">https://github.com/cytoscape/copycat-layout</ext-link>.</p>
            <p>
                <bold>Archived source code at time of publication:</bold> 
                <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.5281/zenodo.1287307">https://doi.org/10.5281/zenodo.1287307</ext-link>
                <sup>
                    <xref ref-type="bibr" rid="ref-11">11</xref>
                </sup>.</p>
            <p>
                <bold>License:</bold> 
                <ext-link ext-link-type="uri" xlink:href="https://opensource.org/licenses/LGPL-2.1">GNU Lesser General Public License v2.1</ext-link>.</p>
        </sec>
    </body>
    <back>
        <ack>
            <title>Acknowledgments</title>
            <p>We would like to thank Justin Huang and Dan Carlin for being the first users of Copycat and for providing valuable feedback during the development process.</p>
        </ack>
        <ref-list>
            <ref id="ref-1">
                <label>1</label>
                <mixed-citation publication-type="journal">
                    <article-title>Navigation and Layout &#x2014; Cytoscape User Manual 3.6.0 documentation</article-title>.
                    <ext-link ext-link-type="uri" xlink:href="http://manual.cytoscape.org/en/stable/Navigation_and_Layout.html#">Reference Source</ext-link>
                </mixed-citation>
            </ref>
            <ref id="ref-2">
                <label>2</label>
                <mixed-citation publication-type="journal">
                    <article-title>Cytoscape App Store - layoutSaver</article-title>. [cited 17 Apr 2018].
                    <ext-link ext-link-type="uri" xlink:href="http://apps.cytoscape.org/apps/layoutsaver">Reference Source</ext-link>
                </mixed-citation>
            </ref>
            <ref id="ref-3">
                <label>3</label>
                <mixed-citation publication-type="book">
                    <article-title>cytoscape-automation</article-title>. Github.
                    <ext-link ext-link-type="uri" xlink:href="https://github.com/cytoscape/cytoscape-automation">Reference Source</ext-link>
                </mixed-citation>
            </ref>
            <ref id="ref-4">
                <label>4</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">
						
                        <name name-style="western">
                            <surname>Fielding</surname>
                            <given-names>RT</given-names>
                        </name>
						
                        <name name-style="western">
                            <surname>Taylor</surname>
                            <given-names>RN</given-names>
                        </name>
					</person-group>:
                    <article-title>Principled Design of the Modern Web Architecture.</article-title>
                    <source>
					
                        <italic toggle="yes">ACM Trans Internet Technol.</italic>
					</source>New York, NY, USA: ACM;<year>2002</year>;<volume>2</volume>(<issue>2</issue>):<fpage>115</fpage>&#x2013;<lpage>150</lpage>.
                    <pub-id pub-id-type="doi">10.1145/514183.514185</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref-5">
                <label>5</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">
						
                        <name name-style="western">
                            <surname>Ono</surname>
                            <given-names>K</given-names>
                        </name>
						
                        <name name-style="western">
                            <surname>Muetze</surname>
                            <given-names>T</given-names>
                        </name>
						
                        <name name-style="western">
                            <surname>Kolishovski</surname>
                            <given-names>G</given-names>
                        </name>
						
                        <etal/>
					</person-group>:
                    <article-title>CyREST: Turbocharging Cytoscape Access for External Tools via a RESTful API  [version 1; referees: 2 approved].</article-title>
                    <source>
						
                        <italic toggle="yes">F1000Res.</italic>
					</source>
                    <year>2015</year>;<volume>4</volume>:<fpage>478</fpage>.
                    <pub-id pub-id-type="pmid">26672762</pub-id>
                    <pub-id pub-id-type="doi">10.12688/f1000research.6767.1</pub-id>
                    <pub-id pub-id-type="pmcid">4670004</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref-6">
                <label>6</label>
                <mixed-citation publication-type="journal">
                    <collab>Cytoscape Automation FAQ</collab>:
                    <article-title>What is the difference between Commands and Functions?</article-title>In: Google Docs. [cited 18 Apr 2018].
                    <ext-link ext-link-type="uri" xlink:href="https://docs.google.com/document/d/1QTrT-9ylhI4OX5DkauMo2ujLIqeg3WDUDwl77KLtfVY/edit#bookmark=id.2sda98tk63j8">Reference Source</ext-link>
                </mixed-citation>
            </ref>
            <ref id="ref-7">
                <label>7</label>
                <mixed-citation publication-type="journal">
                    <article-title>App Developers: Cytoscape Function Best Practices - CIResponse</article-title>. [cited 18 Apr 2018].
                    <ext-link ext-link-type="uri" xlink:href="https://github.com/cytoscape/cytoscape-automation/wiki/App-Developers:-Cytoscape-Function-Best-Practices#ciresponse-data">Reference Source</ext-link>
                </mixed-citation>
            </ref>
            <ref id="ref-8">
                <label>8</label>
                <mixed-citation publication-type="book">
                    <article-title>Command Tool &#x2014; Cytoscape User Manual 3.6.0 documentation</article-title>.
                    <ext-link ext-link-type="uri" xlink:href="http://manual.cytoscape.org/en/stable/Command_Tool.html">Reference Source</ext-link>
                </mixed-citation>
            </ref>
            <ref id="ref-9">
                <label>9</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">
						
                        <name name-style="western">
                            <surname>Carlin</surname>
                            <given-names>DE</given-names>
                        </name>
						
                        <name name-style="western">
                            <surname>Paull</surname>
                            <given-names>EO</given-names>
                        </name>
						
                        <name name-style="western">
                            <surname>Graim</surname>
                            <given-names>K</given-names>
                        </name>
						
                        <etal/>
					</person-group>:
                    <article-title>Prophetic Granger Causality to infer gene regulatory networks.</article-title>
                    <source>
						
                        <italic toggle="yes">PLoS One.</italic>
					</source>
                    <year>2017</year>;<volume>12</volume>(<issue>12</issue>):<fpage> e0170340</fpage>.
                    <pub-id pub-id-type="pmid">29211761</pub-id>
                    <pub-id pub-id-type="doi">10.1371/journal.pone.0170340</pub-id>
                    <pub-id pub-id-type="pmcid">5718405</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref-10">
                <label>10</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">
						
                        <name name-style="western">
                            <surname>Preston-Werner</surname>
                            <given-names>T</given-names>
                        </name>
					</person-group>:
                    <article-title>Semantic Versioning 2.0.0</article-title>. In:
                    <italic toggle="yes">Semantic Versioning</italic>. [cited 18 Apr 2018].
                    <ext-link ext-link-type="uri" xlink:href="https://semver.org/">Reference Source</ext-link>
                </mixed-citation>
            </ref>
            <ref id="ref-11">
                <label>11</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">
						
                        <name name-style="western">
                            <surname>Settle</surname>
                            <given-names>B</given-names>
                        </name>
						
                        <name name-style="western">
                            <surname>dotasek</surname>
                        </name>
							
                        <name name-style="western">
                            <surname>Morris</surname>
                            <given-names>S</given-names>
                        </name>
						
                        <etal/>
					</person-group>:
                    <article-title>cytoscape/copycat-layout: Copycat Layout (Version v1.2.3).</article-title>
                    <source>
						
                        <italic toggle="yes">Zenodo.</italic>
					</source>
                    <year>2018</year>.
                    <ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.5281/zenodo.1287307">Data Source</ext-link>
                </mixed-citation>
            </ref>
        </ref-list>
    </back>
    <sub-article article-type="reviewer-report" id="report35315">
        <front-stub>
            <article-id pub-id-type="doi">10.5256/f1000research.16498.r35315</article-id>
            <title-group>
                <article-title>Reviewer response for version 1</article-title>
            </title-group>
            <contrib-group>
                <contrib contrib-type="author">
                    <name>
                        <surname>Luck</surname>
                        <given-names>Katja</given-names>
                    </name>
                    <xref ref-type="aff" rid="r35315a1">1</xref>
                    <xref ref-type="aff" rid="r35315a2">2</xref>
                    <xref ref-type="aff" rid="r35315a3">3</xref>
                    <role>Referee</role>
                    <uri content-type="orcid">https://orcid.org/0000-0003-2336-9225</uri>
                </contrib>
                <aff id="r35315a1">
                    <label>1</label>Department of Genetics, Harvard Medical School, Boston, MA, USA</aff>
                <aff id="r35315a2">
                    <label>2</label>Department of Cancer Biology, Dana&#x2013;Farber Cancer Institute, Boston, MA, USA</aff>
                <aff id="r35315a3">
                    <label>3</label>Center&#x00a0;for&#x00a0;Cancer Systems Biology&#x00a0;(CCSB), Dana&#x2013;Farber Cancer Institute, Boston, MA, USA</aff>
            </contrib-group>
            <author-notes>
                <fn fn-type="conflict">
                    <p>
                        <bold>Competing interests: </bold>No competing interests were disclosed.</p>
                </fn>
            </author-notes>
            <pub-date pub-type="epub">
                <day>9</day>
                <month>7</month>
                <year>2018</year>
            </pub-date>
            <permissions>
                <copyright-statement>Copyright: &#x00a9; 2018 Luck K</copyright-statement>
                <copyright-year>2018</copyright-year>
                <license xlink:href="https://creativecommons.org/licenses/by/4.0/">
                    <license-p>This is an open access peer review report distributed under the terms of the Creative Commons Attribution Licence, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
                </license>
            </permissions>
            <related-article ext-link-type="doi" id="relatedArticleReport35315" related-article-type="peer-reviewed-article" xlink:href="10.12688/f1000research.15144.1"/>
            <custom-meta-group>
                <custom-meta>
                    <meta-name>recommendation</meta-name>
                    <meta-value>approve</meta-value>
                </custom-meta>
            </custom-meta-group>
        </front-stub>
        <body>
            <p>The article Copycat Layout: Network layout alignment via Cytoscape Automation describes an evolution of an existing Cytoscape App that allows the mapping of the layout of one network onto another network by matching the nodes in both networks using a common node attribute. As a frequent Cytoscape user, I have very much awaited for such a Cytoscape functionality to be developed as it clearly fills a gap.</p>
            <p> </p>
            <p> For programmers and frequent users of the Cytoscape automation functions, the article is very understandable and provides all necessary information for judging whether it suits the user's needs and how to apply it. However, for non-computational users of Cytoscape, some more information could be provided helping them to know whether it solves their needs and how to use it. I might have missed it but I cannot locate information within the article or from a reference or link where to find information how and if the App can be used within Cytoscape without using the REST API or the command line tools of Cytoscape. If it is missing, it might add value to the article to provide such an example. For example, a common user scenario that I have already encountered many times in collaborations with biologists is that we had manually optimized the layout of a network (a very time-consuming procedure) to then later realize that the network data has changed again. This meant to reload the new network and start from scratch the manual layout optimization. I understand that with the Copycat App, the layout from the previous network (in this article corresponding to the source network) can be transferred to the new network (target network) solving the aforementioned problem. It might be helpful to many readers to quickly see from within the article or elsewhere in the documentation or tutorial how to solve this problem with this new App without using scripts.</p>
            <p> </p>
            <p> The whole article is written in very technical terms. Even though for most of them references are provided, the article and software might be more accessible and therefore more used, especially by non-programmers, if efforts were taken to reduce some of the technicalities in the main text.</p>
            <p> </p>
            <p> A suggestion for future improvements of the App is the possibility to highlight differences in links between the source and target network. A nice example for such a use case is shown in Figure 1 of the paper. The networks differ by one node as highlighted by the select tool, however, the networks also differ by some links connecting nodes that are present in both networks. These link differences can be easily missed by visual inspection, especially if the networks contains more nodes than in this example, but might be extremely valuable to spot or identify by the user. I think highlighting unique links to both networks would be a great plus.</p>
            <p>Are the conclusions about the tool and its performance adequately supported by the findings presented in the article?</p>
            <p>Yes</p>
            <p>Is the rationale for developing the new software tool clearly explained?</p>
            <p>Yes</p>
            <p>Is the description of the software tool technically sound?</p>
            <p>Yes</p>
            <p>Are sufficient details of the code, methods and analysis (if applicable) provided to allow replication of the software development and its use by others?</p>
            <p>Partly</p>
            <p>Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool?</p>
            <p>Yes</p>
            <p>Reviewer Expertise:</p>
            <p>I am a computational biologist who has specialized in systems biology, network biology, and data integration. I have worked many times with Cytoscape using its interface as well as its programmatic access points.</p>
            <p>I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard.</p>
        </body>
        <sub-article article-type="response" id="comment3874-35315">
            <front-stub>
                <contrib-group>
                    <contrib contrib-type="author">
                        <name>
                            <surname>Settle</surname>
                            <given-names>Brett</given-names>
                        </name>
                        <aff>UCSD Ideker Lab, USA</aff>
                    </contrib>
                </contrib-group>
                <author-notes>
                    <fn fn-type="conflict">
                        <p>
                            <bold>Competing interests: </bold>No competing interests were disclosed.</p>
                    </fn>
                </author-notes>
                <pub-date pub-type="epub">
                    <day>2</day>
                    <month>8</month>
                    <year>2018</year>
                </pub-date>
            </front-stub>
            <body>
                <p>We would like to thank the referee for positive feedback and helpful comments. Below we acknowledge the notes mentioned in the review: 
                    <list list-type="bullet">
                        <list-item>
                            <p>This paper was published as part of a collection focused on Cytoscape Automation via CyREST, and so we did not mention applying the copycat layout via Cytoscape Desktop. A short section will be added at the beginning for non-REST users, and it will present the very use case you suggest.</p>
                        </list-item>
                        <list-item>
                            <p>This is a very helpful note for future papers on Automation and we will take into account the technical terms that are used.</p>
                        </list-item>
                        <list-item>
                            <p>We very much anticipate an interest in network comparison highlighting of non-matching edges as well as nodes. This will definitely be a feature in a future version of the app. Thank you for the very helpful use case.</p>
                        </list-item>
                    </list>
                </p>
            </body>
        </sub-article>
    </sub-article>
    <sub-article article-type="reviewer-report" id="report35312">
        <front-stub>
            <article-id pub-id-type="doi">10.5256/f1000research.16498.r35312</article-id>
            <title-group>
                <article-title>Reviewer response for version 1</article-title>
            </title-group>
            <contrib-group>
                <contrib contrib-type="author">
                    <name>
                        <surname>Mlecnik</surname>
                        <given-names>Bernhard</given-names>
                    </name>
                    <xref ref-type="aff" rid="r35312a1">1</xref>
                    <xref ref-type="aff" rid="r35312a2">2</xref>
                    <role>Referee</role>
                    <uri content-type="orcid">https://orcid.org/0000-0002-3345-1030</uri>
                </contrib>
                <aff id="r35312a1">
                    <label>1</label>Laboratory of Integrative Cancer Immunology, Cordelier Research Center, Paris, France</aff>
                <aff id="r35312a2">
                    <label>2</label>Inovarion, Paris, France</aff>
            </contrib-group>
            <author-notes>
                <fn fn-type="conflict">
                    <p>
                        <bold>Competing interests: </bold>No competing interests were disclosed.</p>
                </fn>
            </author-notes>
            <pub-date pub-type="epub">
                <day>4</day>
                <month>7</month>
                <year>2018</year>
            </pub-date>
            <permissions>
                <copyright-statement>Copyright: &#x00a9; 2018 Mlecnik B</copyright-statement>
                <copyright-year>2018</copyright-year>
                <license xlink:href="https://creativecommons.org/licenses/by/4.0/">
                    <license-p>This is an open access peer review report distributed under the terms of the Creative Commons Attribution Licence, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
                </license>
            </permissions>
            <related-article ext-link-type="doi" id="relatedArticleReport35312" related-article-type="peer-reviewed-article" xlink:href="10.12688/f1000research.15144.1"/>
            <custom-meta-group>
                <custom-meta>
                    <meta-name>recommendation</meta-name>
                    <meta-value>approve</meta-value>
                </custom-meta>
            </custom-meta-group>
        </front-stub>
        <body>
            <p>Short summary</p>
            <p> </p>
            <p> The Copycat Cytoscape layout plugin presented here maps the node locations of a source network to the node locations of a target network and handles missing nodes. Important is that the source node ids uniquely match the target node ids to avoid network inconsistencies after applying the layout.</p>
            <p> </p>
            <p> The Copycat layout is a straightforward to use plugin. The application is simple but powerful and Cytoscape needs this kind of layout algorithm.</p>
            <p> </p>
            <p> It is also important the the developers offer a REST enabled service to this plugin which is thoroughly described for different programming languages in the article.</p>
            <p> </p>
            <p> The only point the authors could address is a more sophisticated way of handling node inconsistencies. E.g. give a name/id list of nodes that are not unique in the target network to inform the user about this problem instead of just overlaying these nodes on the target network.</p>
            <p> </p>
            <p> Will the authors of this plugin consider edge information in the future? E.g. to give an option to map&#x00a0;only nodes that are linked in the source and target network.</p>
            <p>Are the conclusions about the tool and its performance adequately supported by the findings presented in the article?</p>
            <p>Yes</p>
            <p>Is the rationale for developing the new software tool clearly explained?</p>
            <p>Yes</p>
            <p>Is the description of the software tool technically sound?</p>
            <p>Yes</p>
            <p>Are sufficient details of the code, methods and analysis (if applicable) provided to allow replication of the software development and its use by others?</p>
            <p>Yes</p>
            <p>Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool?</p>
            <p>Yes</p>
            <p>Reviewer Expertise:</p>
            <p>NA</p>
            <p>I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard.</p>
        </body>
        <sub-article article-type="response" id="comment3875-35312">
            <front-stub>
                <contrib-group>
                    <contrib contrib-type="author">
                        <name>
                            <surname>Settle</surname>
                            <given-names>Brett</given-names>
                        </name>
                        <aff>UCSD Ideker Lab, USA</aff>
                    </contrib>
                </contrib-group>
                <author-notes>
                    <fn fn-type="conflict">
                        <p>
                            <bold>Competing interests: </bold>No competing interests were disclosed.</p>
                    </fn>
                </author-notes>
                <pub-date pub-type="epub">
                    <day>2</day>
                    <month>8</month>
                    <year>2018</year>
                </pub-date>
            </front-stub>
            <body>
                <p>We would like to thank the referee for the positive feedback and respond to the referee&#x2019;s comments: 
                    <list list-type="bullet">
                        <list-item>
                            <p>In the current version, a non-unique attribute column used as the mapping variable should be handled better in future versions of the app. Currently we are deciding how best to deal with these mappings.</p>
                        </list-item>
                        <list-item>
                            <p>We would be very interested in adding functionality to restrict layout mapping to edges instead of nodes, given use cases and/or expected results.&#x00a0; These more difficult alignments will be considered for future releases.</p>
                        </list-item>
                    </list>
                </p>
            </body>
        </sub-article>
    </sub-article>
</article>
