Skip to content
Snippets Groups Projects
Commit ab3a699d authored by AndiMajore's avatar AndiMajore
Browse files

added add disorders by protein association to explorer

parent 36cf714a
No related branches found
No related tags found
No related merge requests found
...@@ -13,17 +13,19 @@ export class NetworkLegendComponent implements OnInit { ...@@ -13,17 +13,19 @@ export class NetworkLegendComponent implements OnInit {
@Input() config: IConfig; @Input() config: IConfig;
private contextNodeGroupsToDelete = { private contextNodeGroupsToDelete = {
'explorer': ['foundNode', 'foundDrug', 'seedNode', 'default'], 'explorer': ['foundNode', 'foundDrug', 'seedNode', 'default', 'defaultDisorder'],
'adjacentDrugs': ['foundNode', 'seedNode', 'default'], 'adjacentDrugs': ['foundNode', 'seedNode', 'default', 'defaultDisorder'],
'drugTarget': ['foundDrug', 'seedNode', 'default'], 'adjacentDisorders': ['foundDrug', 'foundNode', 'seedNode', 'default'],
'drug': ['seedNode', 'default'], 'drugTarget': ['foundDrug', 'seedNode', 'default', 'defaultDisorder'],
'drugTargetAndSeeds': ['foundDrug', 'default'], 'drug': ['seedNode', 'default', 'defaultDisorder'],
'drugAndSeeds': ['default'] 'drugTargetAndSeeds': ['foundDrug', 'default', 'defaultDisorder'],
'drugAndSeeds': ['default', 'defaultDisorder']
} }
private contextEdgeGroupsToDelete = { private contextEdgeGroupsToDelete = {
'explorer': ['default'], 'explorer': ['default'],
'adjacentDrugs': ['default'], 'adjacentDrugs': ['default'],
'adjacentDisorders': ['default'],
'drugTarget': ['default'], 'drugTarget': ['default'],
'drug': ['default'], 'drug': ['default'],
'drugTargetAndSeeds': ['default'], 'drugTargetAndSeeds': ['default'],
......
...@@ -155,6 +155,19 @@ export const defaultConfig: IConfig = { ...@@ -155,6 +155,19 @@ export const defaultConfig: IConfig = {
shape: 'diamond', shape: 'diamond',
type: 'default drug type', type: 'default drug type',
}, },
defaultDisorder: {
groupName: 'Disorders',
color: {
border: '#ffa62f',
background: '#ffa62f',
highlight: {
border: '#ffa62f',
background: '#ffa62f'
},
},
shape: 'diamond',
type: 'default disorder type',
},
seedNode: { seedNode: {
groupName: 'Seed Nodes', groupName: 'Seed Nodes',
shape: 'triangle', shape: 'triangle',
......
...@@ -6,6 +6,7 @@ export interface Node { ...@@ -6,6 +6,7 @@ export interface Node {
id: string; id: string;
type: string; type: string;
netexId?: string; netexId?: string;
drugId?:string;
uniprotAc?: string; uniprotAc?: string;
ensg?: Array<string>; ensg?: Array<string>;
group?: string; group?: string;
...@@ -31,8 +32,8 @@ export interface Tissue { ...@@ -31,8 +32,8 @@ export interface Tissue {
name: string; name: string;
} }
export type legendContext = 'explorer' | 'adjacentDrugs' | 'drug' | 'drugTarget' | export type legendContext = 'explorer' | 'adjacentDrugs' | 'drug' | 'drugTarget' |
'drugTargetAndSeeds' | 'drugAndSeeds'; 'drugTargetAndSeeds' | 'drugAndSeeds' | 'adjacentDisorders';
/// netexId to expressionlvl /// netexId to expressionlvl
export type NodeAttributeMap = { string: number } | {}; export type NodeAttributeMap = { string: number } | {};
...@@ -120,6 +121,12 @@ export function getDrugNodeId(drug: Drug) { ...@@ -120,6 +121,12 @@ export function getDrugNodeId(drug: Drug) {
return drug.netexId return drug.netexId
} }
// export function getDisorderNodeId(disorder: Disorder) {
// /**
// * Returns backend_id of Drug object
// */
// return disorder.netexId
export function getNodeId(node: Node) { export function getNodeId(node: Node) {
/** /**
* Returns backend_id of Gene object * Returns backend_id of Gene object
......
...@@ -299,7 +299,16 @@ ...@@ -299,7 +299,16 @@
[value]="adjacentDrugs" [value]="adjacentDrugs"
(valueChange)="updateAdjacentDrugs($event)" (valueChange)="updateAdjacentDrugs($event)"
></app-toggle> ></app-toggle>
<app-toggle
class="footer-buttons network-footer-toolbar-element"
textOn="Disorders"
textOff="Off"
tooltipOn="Display adjacent disorders ON."
tooltipOff="Display adjacent disorders OFF."
[smallStyle]="smallStyle"
[value]="adjacentDisorders"
(valueChange)="updateAdjacentDisorders($event)"
></app-toggle>
<app-toggle <app-toggle
class="footer-buttons network-footer-toolbar-element" class="footer-buttons network-footer-toolbar-element"
textOn="Animation" textOn="Animation"
......
...@@ -152,9 +152,13 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit { ...@@ -152,9 +152,13 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit {
private dumpPositions = false; private dumpPositions = false;
public physicsEnabled = false; public physicsEnabled = false;
public adjacentDrugs = false; public adjacentDrugs = false;
public adjacentDisorders = false;
public adjacentDrugList: Node[] = []; public adjacentDrugList: Node[] = [];
public adjacentDrugEdgesList: Node[] = []; public adjacentDrugEdgesList: Node[] = [];
public adjacentDisorderList: Node[] = [];
public adjacentDisorderEdgesList: Node[] = [];
public queryItems: Wrapper[] = []; public queryItems: Wrapper[] = [];
public showAnalysisDialog = false; public showAnalysisDialog = false;
public showThresholdDialog = false; public showThresholdDialog = false;
...@@ -427,7 +431,6 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit { ...@@ -427,7 +431,6 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit {
} }
} }
}); });
this.networkInternal.on('click', (properties) => { this.networkInternal.on('click', (properties) => {
const nodeIds: Array<string> = properties.nodes; const nodeIds: Array<string> = properties.nodes;
if (nodeIds != null && nodeIds.length > 0) { if (nodeIds != null && nodeIds.length > 0) {
...@@ -485,6 +488,32 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit { ...@@ -485,6 +488,32 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit {
}); });
} }
public updateAdjacentDisorders(bool: boolean){
this.adjacentDisorders = bool;
if (this.adjacentDisorders){
this.netex.adjacentDisorders(this.nodeData.nodes).subscribe(response => {
for (const interaction of response.pdis) {
const edge = {from: interaction.protein, to: interaction.disorder};
this.adjacentDisorderEdgesList.push(mapCustomEdge(edge, this.myConfig));
}
for (const disorder of response.disorders) {
disorder.group = 'defaultDisorder';
disorder.id = disorder.netexId;
this.adjacentDisorderList.push(mapCustomNode(disorder, this.myConfig))
}
this.nodeData.nodes.add(this.adjacentDisorderList);
this.nodeData.edges.add(this.adjacentDisorderEdgesList);
});
this.legendContext = 'adjacentDisorders';
}else {
this.nodeData.nodes.remove(this.adjacentDisorderList);
this.nodeData.edges.remove(this.adjacentDisorderEdgesList);
this.adjacentDisorderList = [];
this.adjacentDisorderEdgesList = [];
this.legendContext = 'explorer';
}
}
public updateAdjacentDrugs(bool: boolean) { public updateAdjacentDrugs(bool: boolean) {
this.adjacentDrugs = bool; this.adjacentDrugs = bool;
if (this.adjacentDrugs) { if (this.adjacentDrugs) {
......
...@@ -358,7 +358,7 @@ export class AnalysisService { ...@@ -358,7 +358,7 @@ export class AnalysisService {
const watch = async () => { const watch = async () => {
if (this.tokens.length > 0) { if (this.tokens.length > 0) {
const newtasks = await this.getTasks(); const newtasks = await this.getTasks();
if (newtasks.length === 0) if(newtasks.length === 0)
return; return;
const newTaskIds = newtasks.map(t => t.token.toString()); const newTaskIds = newtasks.map(t => t.token.toString());
this.tasks = newtasks.concat(this.tasks.filter(t => newTaskIds.indexOf(t.token) === -1)); this.tasks = newtasks.concat(this.tasks.filter(t => newTaskIds.indexOf(t.token) === -1));
......
import { Injectable } from '@angular/core'; import {Injectable} from '@angular/core';
import {environment} from '../../../environments/environment'; import {environment} from '../../../environments/environment';
import {HttpClient, HttpParams} from '@angular/common/http'; import {HttpClient, HttpParams} from '@angular/common/http';
import {AlgorithmType, QuickAlgorithmType} from '../analysis/analysis.service'; import {AlgorithmType, QuickAlgorithmType} from '../analysis/analysis.service';
import { Observable } from 'rxjs'; import {Observable} from 'rxjs';
import { Tissue, Node, EdgeType} from 'src/app/interfaces'; import {Tissue, Node, EdgeType} from 'src/app/interfaces';
import { InteractionDrugProteinDB, InteractionProteinProteinDB } from 'src/app/config'; import {InteractionDrugProteinDB, InteractionProteinProteinDB} from 'src/app/config';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
export class NetexControllerService { export class NetexControllerService {
constructor(private http: HttpClient) { } constructor(private http: HttpClient) {
}
public async getTask(token): Promise<any> { public async getTask(token): Promise<any> {
/** /**
...@@ -42,9 +43,9 @@ export class NetexControllerService { ...@@ -42,9 +43,9 @@ export class NetexControllerService {
} }
public async getTaskResultGene(token): Promise<any> { public async getTaskResultGene(token): Promise<any> {
/** /**
* returns promise of gene view of task result of COMPLETED task * returns promise of gene view of task result of COMPLETED task
*/ */
return this.http.get<any>(`${environment.backend}task_result/?token=${token}&view=genes`).toPromise(); return this.http.get<any>(`${environment.backend}task_result/?token=${token}&view=genes`).toPromise();
} }
...@@ -55,7 +56,7 @@ export class NetexControllerService { ...@@ -55,7 +56,7 @@ export class NetexControllerService {
return this.http.get<any>(`${environment.backend}task_result/?token=${token}&view=cancer_driver_genes`).toPromise(); return this.http.get<any>(`${environment.backend}task_result/?token=${token}&view=cancer_driver_genes`).toPromise();
} }
public async postTask(algorithm: QuickAlgorithmType | AlgorithmType, target, parameters, ) { public async postTask(algorithm: QuickAlgorithmType | AlgorithmType, target, parameters,) {
/** /**
* sends a task to task service * sends a task to task service
*/ */
...@@ -87,28 +88,39 @@ export class NetexControllerService { ...@@ -87,28 +88,39 @@ export class NetexControllerService {
/** /**
* Returns the expression in the given tissue for given nodes and cancerNodes * Returns the expression in the given tissue for given nodes and cancerNodes
*/ */
// slice prefix of netex id away for direct lookup in db, if node not mapped to db, replace by undefined // slice prefix of netex id away for direct lookup in db, if node not mapped to db, replace by undefined
const genesBackendIds = nodes.map( (node: Node) => node.netexId ? node.netexId.slice(1) : undefined); const genesBackendIds = nodes.map((node: Node) => node.netexId ? node.netexId.slice(1) : undefined);
const params = new HttpParams() const params = new HttpParams()
.set('tissue', tissue.netexId) .set('tissue', tissue.netexId)
.set('proteins', JSON.stringify(genesBackendIds)); .set('proteins', JSON.stringify(genesBackendIds));
return this.http.get(`${environment.backend}tissue_expression/`, {params}); return this.http.get(`${environment.backend}tissue_expression/`, {params});
} }
public adjacentDisorders(nodes: Node[]): Observable<any> {
const genesBackendIds = nodes.map((node: Node) => node.netexId && !node.drugId ? node.netexId.slice(1) : undefined).filter(id => id != null);
const drugsBackendIds = nodes.map((node: Node) => node.drugId && node.netexId ? node.netexId.slice(1) : undefined).filter(id => id != null);
const params = {
proteins: genesBackendIds,
drugs: drugsBackendIds,
};
console.log(params)
return this.http.post<any>(`${environment.backend}adjacent_disorders/`, params);
}
public adjacentDrugs(pdiDataset: InteractionDrugProteinDB, nodes: Node[]): Observable<any> { public adjacentDrugs(pdiDataset: InteractionDrugProteinDB, nodes: Node[]): Observable<any> {
/** /**
* Returns the expression in the given tissue for given nodes and cancerNodes * Returns the expression in the given tissue for given nodes and cancerNodes
*/ */
// slice prefix of netex id away for direct lookup in db, if node not mapped to db, replace by undefined // slice prefix of netex id away for direct lookup in db, if node not mapped to db, replace by undefined
const genesBackendIds = nodes.map( (node: Node) => node.netexId ? node.netexId.slice(1) : undefined); const genesBackendIds = nodes.map((node: Node) => node.netexId ? node.netexId.slice(1) : undefined).filter(id => id != null);
const params = { const params = {
pdi_dataset: pdiDataset, pdi_dataset: pdiDataset,
proteins: genesBackendIds proteins: genesBackendIds
} };
return this.http.post<any>(`${environment.backend}adjacent_drugs/`, params); return this.http.post<any>(`${environment.backend}adjacent_drugs/`, params);
} }
public graphmlLink(graph_data: {edges: EdgeType[], nodes: Node[]}) { public graphmlLink(graph_data: { edges: EdgeType[], nodes: Node[] }) {
/** /**
* Sends complete graph data to backend where it is written to graphml File. * Sends complete graph data to backend where it is written to graphml File.
* The file is returned as download for the user. * The file is returned as download for the user.
......
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