Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
COVID-19
models
Commits
ef7bbee1
Commit
ef7bbee1
authored
Jan 18, 2021
by
Marek Ostaszewski
Browse files
hypothetical complexes via API
parent
0ea12b23
Pipeline
#36543
passed with stages
in 1 minute and 3 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Resources/Hipathia/resolve_aliases.R
View file @
ef7bbee1
...
...
@@ -9,47 +9,30 @@ library(httr)
library
(
jsonlite
)
### A convenience function to handle API queries
ask_GET
<-
function
(
furl
,
fask
,
unpack
=
T
)
{
print
(
URLencode
(
paste0
(
furl
,
fask
)))
resp
<-
httr
::
GET
(
url
=
URLencode
(
paste0
(
furl
,
fask
)),
write_memory
(),
httr
::
add_headers
(
'Content-Type'
=
"application/x-www-form-urlencoded"
),
### Currently ignoring SSL!
httr
::
set_config
(
config
(
ssl_verif
ype
er
=
0L
)
))
ask_GET
<-
function
(
f
ask_
url
,
verbose
=
F
)
{
if
(
verbose
)
{
message
(
URLencode
(
fask_url
))
}
resp
<-
httr
::
GET
(
url
=
URLencode
(
fask_url
),
httr
::
add_headers
(
'Content-T
ype
'
=
"application/x-www-form-urlencoded"
))
if
(
httr
::
status_code
(
resp
)
==
200
)
{
### when the content is sent as a zip file, it needs to be handled differently,
### i.e. saved to a tmp file and unzipped
if
(
headers
(
resp
)
$
`content-type`
==
"application/zip"
)
{
tmp
<-
tempfile
()
tmpc
<-
file
(
tmp
,
"wb"
)
writeBin
(
httr
::
content
(
resp
,
as
=
"raw"
),
con
=
tmpc
)
close
(
tmpc
)
unzipped
<-
unzip
(
tmp
)
file.remove
(
tmp
)
return
(
unzipped
)
}
return
(
httr
::
content
(
resp
,
as
=
"text"
))
}
return
(
NULL
)
}
### Define the source
file (GitLab, raw link)
diag
r
am
<-
"
https://git-r3lab.uni.lu/covid/models/-/raw/master/Curation/ER%20Stress/ER_Stress_stable.xml
"
### Define the source
diagram name
diag
_n
am
e
<-
"
Endoplasmatic Reticulum stress
"
### Read in the raw SIF version (here straight from the github of Aurelien)
raw_sif
<-
read.table
(
url
(
"https://git-r3lab.uni.lu/covid/models/-/raw/master/Executable%20Modules/SBML_qual_build/sif/ER_Stress_stable_raw.sif"
),
sep
=
" "
,
header
=
F
,
stringsAsFactors
=
F
)
### Read the list of resources to be integrated, from the MINERVA build scripts
res
<-
read.csv
(
url
(
"https://git-r3lab.uni.lu/covid/models/raw/master/Integration/MINERVA_build/resources.csv"
),
header
=
T
,
stringsAsFactors
=
F
)
diag_name
<-
res
[
res
$
Resource
==
diagram
,
"Name"
]
### Get MINERVA elements
### The address of the COVID-19 Disease Map in MINERVA
map
<-
"https://covid19map.elixir-luxembourg.org/minerva/api/"
### Get configuration of the COVID-19 Disease Map, to obtain the latest (default) version
cfg
<-
fromJSON
(
ask_GET
(
map
,
"configuration/"
))
cfg
<-
fromJSON
(
ask_GET
(
paste0
(
map
,
"configuration/"
))
)
project_id
<-
cfg
$
options
[
cfg
$
options
$
type
==
"DEFAULT_MAP"
,
"value"
]
### The address of the latest (default) build
mnv_base
<-
paste0
(
map
,
"projects/"
,
project_id
,
"/"
)
...
...
@@ -57,14 +40,13 @@ mnv_base <- paste0(map,"projects/",project_id,"/")
message
(
paste0
(
"Asking for diagrams in: "
,
mnv_base
,
"models/"
))
### Get diagrams
models
<-
ask_GET
(
mnv_base
,
"models/"
)
models
<-
ask_GET
(
paste0
(
mnv_base
,
"models/"
)
)
models
<-
fromJSON
(
models
,
flatten
=
F
)
this_refs
<-
models
[
models
$
name
==
diag_name
]
this_refs
<-
models
[
models
$
name
==
diag_name
,]
### Get elements of the chosen diagram
model_elements
<-
fromJSON
(
ask_GET
(
paste0
(
mnv_base
,
"models/"
,
models
$
idObject
[
models
$
name
==
diag_name
],
"/"
)
,
"bioEntities/elements/?columns=id,name,type,references,elementId,complexId,bounds
"
),
model_elements
<-
fromJSON
(
ask_GET
(
paste0
(
mnv_base
,
"models/"
,
models
$
idObject
[
models
$
name
==
diag_name
],
"/"
,
"bioEntities/elements/?columns=id,name,type,references,elementId,complexId,bounds
,hypothetical"
)
),
flatten
=
F
)
message
(
"Fetching entrez ids..."
)
...
...
@@ -92,48 +74,25 @@ group_elements <- function(feid, felements, fentrez) {
}
}
### A workaround function to get information about hypothetical complexes;
### currently MINERVA API does not support this, we need to get the entire CD file and parse it
get_groups
<-
function
(
fname
)
{
message
(
paste0
(
"Getting groups for "
,
fname
,
"..."
))
library
(
xml2
)
## Currently comment out the MINERVA download, some content dlded as binary!
cd_map
<-
read_xml
(
ask_GET
(
mnv_base
,
paste0
(
"models/"
,
models
$
idObject
[
models
$
name
==
fname
],
":downloadModel?handlerClass=lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser"
)))
### CellDesigner namespace
ns_cd
<-
xml_ns_rename
(
xml_ns
(
read_xml
(
"<root>
<sbml xmlns = \"http://www.sbml.org/sbml/level2/version4\"/>
<cd xmlns = \"http://www.sbml.org/2001/ns/celldesigner\"/>
</root>"
)),
d1
=
"sbml"
,
d2
=
"cd"
)
### Get complex ids
cids
<-
xml_attr
(
xml_find_all
(
cd_map
,
"//cd:complexSpeciesAlias"
,
ns_cd
),
"species"
)
### For each check, which is hypothetical
hypocs
<-
sapply
(
cids
,
function
(
x
)
{
tcid
<-
xml_find_first
(
cd_map
,
paste0
(
"//sbml:species[@id='"
,
x
,
"']"
),
ns_cd
)
ifelse
(
length
(
tcid
)
>
0
,
xml_text
(
xml_find_first
(
tcid
,
".//cd:hypothetical"
,
ns_cd
)),
NA
)
})
names
(
hypocs
)
<-
gsub
(
"s_id_"
,
""
,
names
(
hypocs
))
return
(
hypocs
)
### A function to get information about hypothetical complexes
get_role
<-
function
(
feid
,
felements
)
{
fpos
<-
which
(
felements
$
elementId
==
feid
)
if
(
length
(
fpos
)
==
0
)
return
(
NA
)
role
<-
ifelse
(
felements
[
fpos
,
"type"
]
==
"Complex"
,
ifelse
(
felements
[
fpos
,
"hypothetical"
],
"group"
,
"complex"
),
"node"
)
return
(
role
)
}
cgroups
<-
get_groups
(
diag_name
)
message
(
"Translating..."
)
### Create a copy
translated_sif
<-
raw_sif
### Retrieve Entrez and type for the entire columns of sources and targets
s.entrez
<-
sapply
(
raw_sif
[,
1
],
group_elements
,
model_elements
,
entrez
)
s.type
<-
sapply
(
raw_sif
[,
1
],
function
(
x
)
{
ifelse
(
x
%in%
names
(
cgroups
),
ifelse
(
is.na
(
cgroups
[
x
]),
"complex"
,
"group"
),
"node"
)
})
s.type
<-
sapply
(
raw_sif
[,
1
],
get_role
,
model_elements
)
t.entrez
<-
sapply
(
raw_sif
[,
3
],
group_elements
,
model_elements
,
entrez
)
t.type
<-
sapply
(
raw_sif
[,
3
],
function
(
x
)
{
ifelse
(
x
%in%
names
(
cgroups
),
ifelse
(
is.na
(
cgroups
[
x
]),
"complex"
,
"group"
),
"node"
)
})
t.type
<-
sapply
(
raw_sif
[,
3
],
get_role
,
model_elements
)
### Collect x.y information
s.xy
<-
t
(
sapply
(
raw_sif
[,
1
],
function
(
x
)
unlist
(
model_elements
$
bounds
[
model_elements
$
elementId
==
x
,
c
(
3
,
4
)])))
colnames
(
s.xy
)
<-
c
(
"source.x"
,
"source.y"
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment