Skip to content
Snippets Groups Projects
Commit 2affb9ac authored by Julian Matschinske's avatar Julian Matschinske
Browse files

Merge branch 'add-max-deg-and-hub-penalty' into 'master'

Add max deg and hub penalty

See merge request covid-19/frontend!123
parents 118c1595 2130a8b1
No related branches found
No related tags found
No related merge requests found
......@@ -29,6 +29,10 @@
<div>
<table class="table is-narrow">
<tbody>
<tr *ngIf="task.info.parameters.resultSize">
<td>Result Size</td>
<td>{{task.info.parameters.resultSize}}</td>
</tr>
<tr *ngIf="task.info.parameters.k">
<td>K</td>
<td>{{task.info.parameters.k}}</td>
......@@ -45,6 +49,14 @@
<td>Damping Factor</td>
<td>{{task.info.parameters.dampingFactor}}</td>
</tr>
<tr *ngIf="task.info.parameters.maxDeg !== undefined">
<td>Maximum Degree</td>
<td>{{task.info.parameters.maxDeg}}</td>
</tr>
<tr *ngIf="task.info.parameters.hubPenalty !== undefined">
<td>Hub Penality</td>
<td>{{task.info.parameters.hubPenalty}}</td>
</tr>
<tr *ngIf="task.info.parameters.includeIndirectDrugs !== undefined && task.info.target === 'drug'">
<td>Include indirect drugs</td>
<td>
......@@ -66,10 +78,6 @@
<i *ngIf="task.info.parameters.ignoreNonSeedBaits" class="fa fa-times"></i>
</td>
</tr>
<tr *ngIf="task.info.parameters.resultSize">
<td>Result Size</td>
<td>{{task.info.parameters.resultSize}}</td>
</tr>
</tbody>
</table>
</div>
......
......@@ -27,13 +27,6 @@
</div>
</div>
<div *ngIf="algorithm === 'keypathwayminer' && hasBaits">
<div class="notification is-warning warning">
You have selected <i class="fa fa-virus"></i> viral proteins.
If you want to use KeyPathwayMiner, please remove them because it cannot process them.
</div>
</div>
<div class="tabs is-toggle is-small is-fullwidth is-rounded has-tooltip">
<ul>
<li [class.is-active]="algorithm === algo.slug" *ngFor="let algo of algorithms">
......@@ -43,67 +36,147 @@
</div>
<div *ngIf="algorithm==='trustrank'">
<p class="help info">
<span class="icon"><i class="fa fa-info"></i></span>
<a href="https://en.wikipedia.org/wiki/TrustRank" target="_blank">TrustRank</a>
is a node centrality measure that ranks nodes in a network based on how well they are connected to a
(trusted) set of seed nodes (Gyöngyi, Garcia-Molina, and Pedersen 2004).
</p>
<div class="field">
<label class="label" for="trustrank-rs">Result Size</label>
<div class="control">
<input [(ngModel)]="trustrankResultSize" id="trustrank-rs" class="input" type="number"
placeholder="Result size" required>
</div>
</div>
<div class="field" *ngIf="target === 'drug'">
<label class="label">Indirect Drugs</label>
<app-toggle textOn="Include" textOff="Ignore" tooltipOn="Include indirect drugs."
tooltipOff="Exclude indirect drugs from the result."
[(value)]="trustrankIncludeIndirectDrugs"></app-toggle>
[(value)]="trustrankIncludeIndirectDrugs">
</app-toggle>
<p class="help">
Specifies whether also drugs targeting interactors of the seed nodes should be considered.
</p>
</div>
<div class="field" *ngIf="target === 'drug'">
<label class="label">Non-approved Drugs</label>
<app-toggle textOn="Include" textOff="Ignore" tooltipOn="Include non-approved drugs."
tooltipOff="Exclude non-approved drugs from the result."
[(value)]="trustrankIncludeNonApprovedDrugs"></app-toggle>
[(value)]="trustrankIncludeNonApprovedDrugs">
</app-toggle>
</div>
<div class="field">
<label class="label" for="trustrank-df">Damping Factor</label>
<div class="control">
<input [(ngModel)]="trustrankDampingFactor" id="trustrank-df" class="input" type="number"
placeholder="Damping factor"
min="0" max="1"
required>
placeholder="Damping factor" min="0" max="1" required>
</div>
<p class="help">
The larger the damping factor, the faster the trust is propagated through the network.
</p>
</div>
<div class="field">
<label class="label" for="trustrank-md">Maximum degree</label>
<div class="control">
<input [(ngModel)]="trustrankMaxDeg" id="trustrank-md" class="input" type="number"
placeholder="Maximum degree" min="0" max="1" required>
</div>
<p class="help">
All nodes with degree greater than this value times number of vertices will be ignored.
</p>
</div>
<div class="field">
<label class="label" for="trustrank-hp">Hub penalty</label>
<div class="control">
<input [(ngModel)]="trustrankHubPenalty" id="trustrank-hp" class="input" type="number"
placeholder="Maximum degree" min="0" max="1" required>
</div>
<p class="help">
Penalty parameter for hubs.
</p>
</div>
<div class="field" *ngIf="target === 'drug-target'">
<label class="label">Include non-seed viral proteins</label>
<app-toggle textOn="Include" textOff="Ignore"
tooltipOn="Include viral proteins that are not seeds."
tooltipOff="Exclude viral proteins that are not seeds."
[(value)]="trustrankIncludeViralNonSeeds"></app-toggle>
[(value)]="trustrankIncludeViralNonSeeds">
</app-toggle>
</div>
<div class="box">
<article class="media">
<div class="media-left">
<span class="icon"><i class="fa fa-info"></i></span>
</div>
<div class="media-content">
<div class="content">
<h6 class="is-6">About TrustRank</h6>
<p>
<a href="https://en.wikipedia.org/wiki/TrustRank" target="_blank">TrustRank</a>
is a node centrality measure that ranks nodes in a network based on how well they are connected to a
(trusted) set of seed nodes (Gyöngyi, Garcia-Molina, and Pedersen 2004).
</p>
</div>
</div>
</article>
</div>
</div>
<div *ngIf="algorithm==='closeness'">
<div class="field">
<label class="label" for="trustrank-rs">Result Size</label>
<label class="label" for="closeness-rs">Result Size</label>
<div class="control">
<input [(ngModel)]="trustrankResultSize" id="trustrank-rs" class="input" type="number"
<input [(ngModel)]="closenessResultSize" id="closeness-rs" class="input" type="number"
placeholder="Result size" required>
</div>
</div>
</div>
<div *ngIf="algorithm==='closeness'">
<p class="help info"><span class="icon"><i class="fa fa-info"></i></span>
<a href="https://en.wikipedia.org/wiki/Closeness_centrality" target="_blank">Closeness Centrality</a>
is a node centrality measure that ranks the nodes in a network based on the lengths of their shortest paths
to all other nodes in the network (Kaczprowski, Doncheva, and Albrecht 2013).
</p>
<div class="field" *ngIf="target === 'drug'">
<label class="label">Indirect Drugs</label>
<app-toggle textOn="Include" textOff="Ignore" tooltipOn="Include indirect drugs."
tooltipOff="Exclude indirect drugs from the result."
[(value)]="closenessIncludeIndirectDrugs"></app-toggle>
[(value)]="closenessIncludeIndirectDrugs">
</app-toggle>
<p class="help">
Specifies whether also drugs targeting interactors of the seed nodes should be considered.
</p>
</div>
<div class="field" *ngIf="target === 'drug'">
<label class="label">Non-approved Drugs</label>
<app-toggle textOn="Include" textOff="Ignore" tooltipOn="Include non-approved drugs."
tooltipOff="Exclude non-approved drugs from the result."
[(value)]="closenessIncludeNonApprovedDrugs"></app-toggle>
[(value)]="closenessIncludeNonApprovedDrugs">
</app-toggle>
</div>
<div class="field">
<label class="label" for="closeness-md">Maximum degree</label>
<div class="control">
<input [(ngModel)]="closenessMaxDeg" id="closeness-md" class="input" type="number"
placeholder="Maximum degree" min="0" max="1" required>
</div>
<p class="help">
All nodes with degree greater than this value times number of vertices will be ignored.
</p>
</div>
<div class="field">
<label class="label" for="closeness-hp">Hub penalty</label>
<div class="control">
<input [(ngModel)]="closenessHubPenalty" id="closeness-hp" class="input" type="number"
placeholder="Maximum degree" min="0" max="1" required>
</div>
<p class="help">
Penalty parameter for hubs.
</p>
</div>
<div class="field" *ngIf="target === 'drug-target'">
<label class="label">Include non-seed viral proteins</label>
<app-toggle textOn="Include" textOff="Ignore"
......@@ -111,27 +184,55 @@
tooltipOff="Exclude viral proteins that are not seeds."
[(value)]="closenessIncludeViralNonSeeds"></app-toggle>
</div>
<div class="box">
<article class="media">
<div class="media-left">
<span class="icon"><i class="fa fa-info"></i></span>
</div>
<div class="media-content">
<div class="content">
<h6 class="is-6">About Closeness Centrality</h6>
<p>
<a href="https://en.wikipedia.org/wiki/Closeness_centrality" target="_blank">Closeness Centrality</a>
is a node centrality measure that ranks the nodes in a network based on the lengths of their shortest
paths to all other nodes in the network (Kaczprowski, Doncheva, and Albrecht 2013).
</p>
</div>
</div>
</article>
</div>
</div>
<div *ngIf="algorithm==='degree'">
<div class="field">
<label class="label" for="closeness-rs">Result Size</label>
<label class="label" for="degree-rs">Result Size</label>
<div class="control">
<input [(ngModel)]="closenessResultSize" id="closeness-rs" class="input" type="number"
<input [(ngModel)]="degreeResultSize" id="degree-rs" class="input" type="number"
placeholder="Result size" required>
</div>
</div>
</div>
<div *ngIf="algorithm==='degree'">
<p class="help info"><span class="icon"><i class="fa fa-info"></i></span>
<a href="https://en.wikipedia.org/wiki/Centrality#Degree_centrality" target="_blank">Degree Centrality</a>
assigns an importance score based simply on the number of links held by each node. In CoVex, we use a modified
version which does not consider all links but only the neighbouring seeds.
</p>
<div class="field" *ngIf="target === 'drug'">
<label class="label">Non-approved Drugs</label>
<app-toggle textOn="Include" textOff="Ignore" tooltipOn="Include non-approved drugs."
tooltipOff="Exclude non-approved drugs from the result."
[(value)]="degreeIncludeNonApprovedDrugs"></app-toggle>
</div>
<div class="field">
<label class="label" for="degree-md">Maximum degree</label>
<div class="control">
<input [(ngModel)]="degreeMaxDeg" id="degree-md" class="input" type="number"
placeholder="Maximum degree" min="0" max="1" required>
</div>
<p class="help">
All nodes with degree greater than this value times number of vertices will be ignored.
</p>
</div>
<div class="field" *ngIf="target === 'drug-target'">
<label class="label">Include non-seed viral proteins</label>
<app-toggle textOn="Include" textOff="Ignore"
......@@ -139,21 +240,38 @@
tooltipOff="Exclude viral proteins that are not seeds."
[(value)]="degreeIncludeViralNonSeeds"></app-toggle>
</div>
<div class="field">
<label class="label" for="degree-rs">Result Size</label>
<div class="control">
<input [(ngModel)]="degreeResultSize" id="degree-rs" class="input" type="number"
placeholder="Result size" required>
</div>
<div class="box">
<article class="media">
<div class="media-left">
<span class="icon"><i class="fa fa-info"></i></span>
</div>
<div class="media-content">
<div class="content">
<h6 class="is-6">About Degree Centrality</h6>
<p>
<a href="https://en.wikipedia.org/wiki/Centrality#Degree_centrality" target="_blank">
Degree Centrality
</a>
assigns an importance score based simply on the number of links held by each node. In CoVex, we use
a modified version which does not consider all links but only the neighbouring seeds.
</p>
</div>
</div>
</article>
</div>
</div>
<div *ngIf="algorithm==='keypathwayminer'">
<p class="help info"><span class="icon"><i class="fa fa-info"></i></span>
<a href="https://keypathwayminer.compbio.sdu.dk/keypathwayminer/">KeyPathwayMiner</a>
is a network enrichment tool that identifies condition-specific sub-networks (key pathways)
(Alcaraz et al. 2016).
</p>
<div *ngIf="hasBaits">
<div class="notification is-warning warning">
You have selected <i class="fa fa-virus"></i> viral proteins.
If you want to use KeyPathwayMiner, please remove them because it cannot process them.
</div>
</div>
<div class="field">
<label class="label" for="keypathwayminer-k">K</label>
<div class="control">
......@@ -168,15 +286,29 @@
</div>
</div>
</div>
<div class="box">
<article class="media">
<div class="media-left">
<span class="icon"><i class="fa fa-info"></i></span>
</div>
<div class="media-content">
<div class="content">
<h6 class="is-6">About KeyPathwayMiner</h6>
<p>
<a href="https://keypathwayminer.compbio.sdu.dk/keypathwayminer/">KeyPathwayMiner</a>
is a network enrichment tool that identifies condition-specific sub-networks (key pathways)
(Alcaraz et al. 2016).
</p>
</div>
</div>
</article>
</div>
</div>
<div *ngIf="algorithm==='multisteiner'">
<p class="help info"><span class="icon"><i class="fa fa-info"></i></span>
The <a href="https://en.wikipedia.org/wiki/Steiner_tree_problem">Steiner tree</a>
problem is a classical combinatorial optimization problem. It asks to find a sub-graph
of minimum size connecting a given set of seed nodes.
This implementation behaves non-deterministically, so results can differ between multiple runs.
</p>
<div class="field">
<label class="label" for="multisteiner-numtrees">Number of Steiner trees to return</label>
<div class="control">
......@@ -194,6 +326,7 @@
</div>
</div>
</div>
<div class="field">
<label class="label" for="multisteiner-numtrees">Tolerance for trees</label>
<div class="control">
......@@ -211,6 +344,29 @@
</div>
</div>
</div>
<div class="field">
<label class="label" for="multisteiner-md">Maximum degree</label>
<div class="control">
<input [(ngModel)]="multisteinerMaxDeg" id="multisteiner-md" class="input" type="number"
placeholder="Maximum degree" min="0" max="1" required>
</div>
<p class="help">
All nodes with degree greater than this value times number of vertices will be ignored.
</p>
</div>
<div class="field">
<label class="label" for="multisteiner-hp">Hub penalty</label>
<div class="control">
<input [(ngModel)]="multisteinerHubPenalty" id="multisteiner-hp" class="input" type="number"
placeholder="Maximum degree" min="0" max="1" required>
</div>
<p class="help">
Penalty parameter for hubs.
</p>
</div>
<div class="field" *ngIf="target === 'drug-target'">
<label class="label">Include non-seed viral proteins</label>
<app-toggle textOn="Include" textOff="Ignore"
......@@ -218,6 +374,26 @@
tooltipOff="Exclude viral proteins that are not seeds."
[(value)]="multisteinerIncludeViralNonSeeds"></app-toggle>
</div>
<div class="box">
<article class="media">
<div class="media-left">
<span class="icon"><i class="fa fa-info"></i></span>
</div>
<div class="media-content">
<div class="content">
<h6 class="is-6">About Multi-Steiner</h6>
<p>
The <a href="https://en.wikipedia.org/wiki/Steiner_tree_problem">Steiner tree</a>
problem is a classical combinatorial optimization problem. It asks to find a sub-graph
of minimum size connecting a given set of seed nodes.
This implementation behaves non-deterministically, so results can differ between multiple runs.
</p>
</div>
</div>
</article>
</div>
</div>
</section>
......
.modal-card {
height: 600px;
height: 800px;
max-height: 80vh;
}
.modal-card-body {
......@@ -13,4 +14,8 @@
.help.info {
margin-bottom: 20px;
.icon {
background-color: blue;
}
}
......@@ -35,17 +35,22 @@ export class LaunchAnalysisComponent implements OnInit, OnChanges {
public trustrankIncludeNonApprovedDrugs = false;
public trustrankIncludeViralNonSeeds = true;
public trustrankDampingFactor = 0.85;
public trustrankMaxDeg = 1.0;
public trustrankHubPenalty = 0.0;
public trustrankResultSize = 20;
// Closeness Parameters
public closenessIncludeIndirectDrugs = false;
public closenessIncludeNonApprovedDrugs = false;
public closenessIncludeViralNonSeeds = true;
public closenessMaxDeg = 1.0;
public closenessHubPenalty = 0.0;
public closenessResultSize = 20;
// Degree Parameters
public degreeIncludeNonApprovedDrugs = false;
public degreeIncludeViralNonSeeds = true;
public degreeMaxDeg = 1.0;
public degreeResultSize = 20;
// Keypathwayminer Parameters
......@@ -55,6 +60,8 @@ export class LaunchAnalysisComponent implements OnInit, OnChanges {
public multisteinerNumTrees = 5;
public multisteinerTolerance = 10;
public multisteinerIncludeViralNonSeeds = true;
public multisteinerMaxDeg = 1.0;
public multisteinerHubPenalty = 0.0;
public hasBaits;
......@@ -96,17 +103,22 @@ export class LaunchAnalysisComponent implements OnInit, OnChanges {
parameters.include_indirect_drugs = this.trustrankIncludeIndirectDrugs;
parameters.include_non_approved_drugs = this.trustrankIncludeNonApprovedDrugs;
parameters.ignore_non_seed_baits = !this.trustrankIncludeViralNonSeeds;
parameters.max_deg = this.trustrankMaxDeg;
parameters.hub_penalty = this.trustrankHubPenalty;
parameters.result_size = this.trustrankResultSize;
} else if (this.algorithm === 'closeness') {
parameters.strain_or_drugs = this.target === 'drug' ? 'drugs' : this.dataset;
parameters.include_indirect_drugs = this.closenessIncludeIndirectDrugs;
parameters.include_non_approved_drugs = this.closenessIncludeNonApprovedDrugs;
parameters.ignore_non_seed_baits = !this.closenessIncludeViralNonSeeds;
parameters.max_deg = this.closenessMaxDeg;
parameters.hub_penalty = this.closenessHubPenalty;
parameters.result_size = this.closenessResultSize;
} else if (this.algorithm === 'degree') {
parameters.strain_or_drugs = this.target === 'drug' ? 'drugs' : this.dataset;
parameters.include_non_approved_drugs = this.degreeIncludeNonApprovedDrugs;
parameters.ignore_non_seed_baits = !this.degreeIncludeViralNonSeeds;
parameters.max_deg = this.degreeMaxDeg;
parameters.result_size = this.closenessResultSize;
} else if (this.algorithm === 'keypathwayminer') {
parameters.k = this.keypathwayminerK;
......@@ -115,6 +127,8 @@ export class LaunchAnalysisComponent implements OnInit, OnChanges {
parameters.num_trees = this.multisteinerNumTrees;
parameters.tolerance = this.multisteinerTolerance;
parameters.ignore_non_seed_baits = !this.multisteinerIncludeViralNonSeeds;
parameters.max_deg = this.multisteinerMaxDeg;
parameters.hub_penalty = this.multisteinerHubPenalty;
}
await this.analysis.startAnalysis(this.algorithm, this.target, parameters);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment