SmallWorld Documentation for Future Developer
Introduction
Here is the link to Smallworld's manual
- Username: ucsf@nextmovesoftware.com
- Password: <Ask jjiteam@googlegroups.com>
All smallworld databases live in abacus' db3.
Smallworld frontend files are consolidated and located at /export/db3/smallworld_extract/.extract.
Execute command start_smallworld to see options on which smallworld instance to start/restart.
How to Download Smallworld
- Ssh to abacus and become root. Prepare directory
mkdir /opt/nextmove/smallworld-<version> && cd /opt/nextmove/smallworld-<version>
- Download Software with this link
- Username: ucsf@nextmovesoftware.com
- Password: <Ask jjiteam@googlegroups.com>
- Go to releases. Look for smallworld-java-<version>.tar.gz and copy the link address.
- Download using wget
wget --user ucsf@nextmovesoftware.com --password <Ask jjiteam@googlegroups.com> <link address>
- Decompress the file
tar -xvf <file_name>
How to Launch Smallworld For The First Time
Prepare Files and Directories
- Ssh to abacus and become root
- Open a port in the firewall
firewall-cmd --permanent --add-port=<port_number>/tcp firewall-cmd --reload
- Go to smallworld databases directory
cd /export/db3/
- Create a Smallworld directory and go to it
mkdir <smallworld_dir> && cd <smallworld_dir>
- Inside that directory, create these
- a symbolic link to the smallworld anon map
ln -s /export/db2/smallworld_anon_21Q4 anon
- a sub-directory called maps to store databases
mkdir maps
- a smallworld config file
vim smallworld.cfg
- Add this block of code inside the config file
[WebApp] DepictionUrl=./depict/svg?w=%w&h=%h&smi=%s&qry=%q&cols=%c&cmap=%m ResolverUrl=./util/smi2mol?smi=%s SearchTimeOut=5000 SearchAsYouDraw=true [Score] Name=Atom Alignment Description=Aligns and scores each hit relative to the query atom types, differences are categorised as MAJ, MIN, HYB, SUB Class=com.nmsoftware.smallworld.score.SimpleAtomAlignment EnabledByDefault=false MappingMode=EditMap [Score] Name=SMARTS Alignment Description=Treat input as SMARTS and align and score each hit relative to the query atom expressions in the input Class=com.nmsoftware.smallworld.score.SmartsAtomAlignment EnabledByDefault=false [Score] Name=ECFP4 Description=Extended Connectivity Circular Fingerprint Class=com.nmsoftware.smallworld.score.EcfpTanimoto Radius=2 EnabledByDefault=true [Score] Name=Daylight Description=Path based fingerprint Class=com.nmsoftware.smallworld.score.DaylightTanimoto EnabledByDefault=true
- SearchTimeOut should be the only option you'll change in the future. It caps search time to lessen strain on machine.
- Place any *.anon.maps you've already compiled for testing into the maps sub-directory.
Start Smallworld Instance
- Go to smallworld extract directory
cd /export/db3/smallworld_extract
- Create a screen
screen -S <screen_name>
- Export the smallworld directory you've made
export SWDIR=/export/db3/<smallworld_dir>
- Launch java
java -jar /opt/nextmove/smallworld-<version>/sw-ws-<version>.jar --httpPort=<port_number>
How to Build Smallworld Maps/Databases
Consolidate smiles into /export/db3/temp_mapping.
Use the script located in that directory called smallworld_map_script.
Here is the content of the script:
#!/bin/csh -f
setenv SWDIR /export/db3/public_smallworld_4th_gen/
alias sw 'time java -jar /opt/nextmove/smallworld-5.1/sw.jar'
set target = '*.smi'
foreach i ($target)
echo '(sw map' $i '-T tmp/ -o '${i}'.anon.map -u '${i}'.anon.unmapped) |& tee '${i}'_log'
(sw map $i -T tmp/ -o ${i}.anon.map -u ${i}.anon.unmapped) |& tee ${i}_log
echo 'sw blm -p 0.01 '${i}'.anon.map'
sw blm -p 0.01 ${i}.anon.map
end
Command Details
setenv sets the environment where the anon master map is
java -jar /opt/nextmove/smallworld-5.1/sw.jar shortened to sw via alias
map will map the smiles based on the current anon master map.
- -T stores temp files so /tmp does not get overloaded
- -o output with custom name you like
- -u will collect the unmapped molecules to send to Nextmove or to use swextend
tee will log the progress of the process
Splitting Databases
[Follow this page if John has asked you to split the database into smaller slices.]
Active Smallworld Instances
Type | URL | Machine:Port | Directory |
---|---|---|---|
Public | http://sw.docking.org/ | 10.20.0.5:5020 | /nfs/db3/public_smallworld_4th_gen |
Private | http://swp.docking.org/ | 10.20.0.5:8080 | /nfs/db3/private_smallworld_4th_gen |
Super Private | http://swc.docking.org/ | 10.20.0.5:5099 | /nfs/db3/super_private_smallworld_4th_gen |
SWBB | http://swbb.docking.org/ | 10.20.0.5:8081 | /nfs/db3/swbb_5th_gen |
SWCC | http://swcc.docking.org/ | 10.20.0.5:8082 | /nfs/db3/swcc_5th_gen |
Customize Smallworld FrontEnd To Our Needs (Smallworld 5.5)
These instructions only worked and compiled for me in the machine called epyc which is running Rocky 8 Linux operating system.
Summary of changes in swsearch.js:
- Conditional hyperlinks attached to smallworld hits. Leads to zinc20, cartblanche22, or nothing.
Summary of changes in search.html:
- Add 'Ask Questions' and contact info
Install Prerequisite Packages
- Install Apache Maven
dnf install maven -y
- In your home directory, create a new directory to hold the files for the upcoming procedures
mkdir /mnt/nfs/home/jjg/smallworld_build_from_source
- Download these latest Smallworlds and store them in 'smallworld_build_from_source/'. Here's how to download Smallworld.
- smallworld-java-5.5.tar.gz
- smallworld-java-src-5.5.tar.gz
- Extract contents from the tar.gz files
tar -xvf smallworld-java-5.5.tar.gz tar -xvf smallworld-java-src-5.5.tar.gz
- Install Apache Maven Smallworld Dependencies
cd /mnt/nfs/home/jjg/smallworld_build_from_source/smallworld-java/lib/ bash mvn-install.sh
Customizing swsearch.js
Location: /mnt/nfs/home/jjg/smallworld_build_from_source/smallworld-java-src/web/src/main/webapp/WEB-INF/static/js/swsearch.js
Conditional Hyperlinks
- vim /mnt/nfs/home/jjg/smallworld_build_from_source/smallworld-java-src/web/src/main/webapp/WEB-INF/static/js/swsearch.js
- Search for this
?div.append("<b>" + id + "</b>");
- Replace the inside of the else statement with these lines of code
if (id.substring(0,6) == "ZINC00") { div.append("<b><a target='_blank' href='https://zinc20.docking.org/substances/"+id+"'>" + id + "</a></b>"); } else if(id.substring(0,4) == "ZINC" && id.substring(4,6) != "00") { div.append("<b><a target='_blank' href='https://cartblanche22.docking.org/searchZinc/"+id+"'>" + id + "</a></b>"); } else { div.append("<b>" + id + "</b>"); }
Customizing search.html
Location: /mnt/nfs/home/jjg/smallworld_build_from_source/smallworld-java-src/web/src/main/webapp/WEB-INF/static/search.html
Add 'Ask Questions'
- vim /mnt/nfs/home/jjg/smallworld_build_from_source/smallworld-java-src/web/src/main/webapp/WEB-INF/static/search.html
- Search 'Scoring Methods'
?Scoring Methods
- At the end of that big block of 'div', add this:
<div class="section-head"> Ask Questions <table class="swopt searchasyoudraw" style="width: 100%"> <th style="text-align: left">Email us: jjiteam@googlegroups.com</th> </table> </div>
- It should look like this
<div class="section-head"> Scoring Methods </div> <table id="swscore"> </table> </div> <div class="section-head"> Ask Questions <table class="swopt searchasyoudraw" style="width: 100%"> <th style="text-align: left">Email us: jjiteam@googlegroups.com</th> </table> </div>
Compile Code To Make WAR File
- Build WAR File
cd /nfs/home/jjg/smallworld_build_from_source/smallworld-java-src/web mvn install -Pbootable
- If it works, then the new WAR File is located at /mnt/nfs/home/jjg/smallworld_build_from_source/smallworld-java-src/web/target/sw-ws-5.5.war
Restarting Smallworld Instance(s)
- Ssh to abacus and become root
- execute run_sw_on_reboot.sh to show restart all instances on the machine
bash /root/run_arthors_on_reboot.sh
- execute start_smallworld to restart specific Smallworld instance. It will show you options to choose from.
start_smallworld
How to use Smallworld Java Command Line
- Use bash as your shell
bash //just type in bash and enter
- Export these variables
export SWDIR=/mnt/nfs/db3/public_smallworld_5th_gen export sw='java -jar /nfs/db3/smallworld-5.5/sw.jar'
- Run the similarity command and it will display what it can do
$sw sim
- The path of the databases you can search from is here
- /mnt/nfs/db3/public_smallworld_5th_gen/maps/
- /mnt/nfs/db3/private_smallworld_5th_gen/maps/
- /mnt/nfs/db3/super_private_smallworld_5th_gen/maps/
- Here is an example of a basic usage
$sw sim 'c1ccccc1' -db /mnt/nfs/db3/public_smallworld_5th_gen/maps/all-zinc.smi.anon.map
- Here is an example of an advanced usage
$sw sim 'c1ccccc1' --tdn 0 --rdn 0 --ldn 0 -db /mnt/nfs/db3/public_smallworld_5th_gen/maps/all-zinc.smi.anon.map -n 0 -d 2
Example Java Command Line Script
This script performs a similarity search on all databases in the public or private smallworld.
Usage: bash cmd_sim.sh <smiles text file> <library> <max_hits> <distance>
- -- <smiles text file> | a text file of smiles in this format:
- <smiles> <name of molecule>
- -- <library> | public or private
- -- <max_hits> | needs an integer, putting 0 means show all results
- -- <distance> | needs an integer"
Example: bash cmd_sim.sh smiles.txt public 0 2
#!/bin/bash
smi_file=$1
library=$2
max_hits=$3
distance=$4
version="5.5"
sw_dir=/mnt/nfs/db3
sw='java -jar /nfs/db3/smallworld-'$version'/sw.jar'
public_dir=${sw_dir}/public_smallworld_5th_gen/
private_dir=${sw_dir}/private_smallworld_5th_gen/
public_maps=${public_dir}maps/*.anon.map
private_maps=${private_dir}maps/*.anon.map
if [ "$smi_file" = "-h" ] || [ "$smi_file" = "--help" ]
then
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -
echo "This script performs a similarity search on all databases in the public or private smallworld."
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -
echo "Usage: bash cmd_sim.sh <smiles text file> <library> <max_hits> <distance>
-- <smiles text file> | a text file of smiles in this format:
<smiles> <name of molecule>
-- <library> | public or private
-- <max_hits> | needs an integer, putting 0 means show all results
-- <distance> | needs an integer"
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -
echo "Example:
bash cmd_sim.sh smiles.txt public 0 2"
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -
else
while IFS= read -r line
do
smiles=$(echo $line | awk '{print $1}')
name=$(echo $line | awk '{print $2}')
echo $name $smiles
if [ $library == "public" ]
then
export SWDIR=$public_dir
for maps in $public_maps
do
echo $maps
$sw sim -db $maps -v -n$max_hits -d$distance -score AtomAlignment:SMILES $smiles
done
elif [ $library == "private" ]
then
export SWDIR=$private_dir
for maps in $private_maps
do
echo $maps
$sw sim -db $maps -v -n$max_hits -d$distance -score AtomAlignment:SMILES $smiles
done
else
echo "Invalid Options"
fi
done < $smi_file
fi