Arthor Documentation for Future Developer: Difference between revisions

From DISI
Jump to navigation Jump to search
 
(14 intermediate revisions by the same user not shown)
Line 79: Line 79:
#!/bin/bash
#!/bin/bash


target="*/*.smi"
target="*.smi"
threads='48'
threads='48'
version="3.6.1"
version="3.6.1"
Line 91: Line 91:
         echo 'smi2atdb -v -r -j '$threads' -p '$j' '${j}'.atdb |& tee -a '${j}'_log'
         echo 'smi2atdb -v -r -j '$threads' -p '$j' '${j}'.atdb |& tee -a '${j}'_log'
         time smi2atdb -v -r -j $threads -p $j ${j}.atdb |& tee -a ${j}_log
         time smi2atdb -v -r -j $threads -p $j ${j}.atdb |& tee -a ${j}_log
        echo 'atdb2fp -j '$threads' '$j'.atdb'
echo 'smi2atfp -j '$threads' -p '$j' '${j}.atfp' |& tee -a '${j}'_log'
    time atdb2fp -j $threads ${j}.atdb
    chmod 744 ${j}.atdb.fp
    echo 'smi2atfp -j '$threads' -p '$j' '${j}.atfp' |& tee -a '${j}'_log'
         time smi2atfp -j $threads -p $j ${j}.atfp |& tee -a ${j}_log
         time smi2atfp -j $threads -p $j ${j}.atfp |& tee -a ${j}_log
done
for i in $target*atdb
do
echo 'atdb2fp -j '$threads' '$i
        time atdb2fp -j $threads $i
chmod 744 $i.fp
done
done
</source>
</source>
Line 147: Line 151:
| arthor
| arthor
| 10.20.200.100:8080
| 10.20.200.100:8080
| /local2/public_arthor/
| /local3/public_arthor/
| Public Arthor
| Public Arthor
|-
|-
Line 162: Line 166:
| arthor
| arthor
| 10.20.200.100:8081
| 10.20.200.100:8081
| /local2/private_arthor/
| /local3/private_arthor/
| Private Arthor
| Private Arthor
|-
|-
Line 182: Line 186:
| nun
| nun
| 10.20.0.40:8008
| 10.20.0.40:8008
| /local2/public_arthor/
| Super Private Arthor Database Node
|-
| samekh
| 10.20.0.41:8008
| /local2/public_arthor/
| /local2/public_arthor/
| Super Private Arthor Database Node
| Super Private Arthor Database Node
Line 207: Line 216:
|}
|}


== Customizing Arthor Frontend To Our Needs (Arthor 3.4.7) ==
== Customizing Arthor Frontend To Our Needs (Arthor 3.6.1) ==
'''These instructions only worked and compiled for me in the machine called epyc which is running Rocky 8 Linux operating system.'''
'''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 index.html:
Summary of changes in index.html:
*Add download options
*Add contact info
*Add contact info
*Advertise TLDR
*Advertise TLDR
*Remove buttons for Similarity and Formula
*Remove button for Formula
*Database Information Link


Summary of changes in index.js:
Summary of changes in index.js:
*Add download options
*Hyperlink the results to zinc20
*Hyperlink the results to zinc20


Summary of changes in sketcher.js:
Summary of changes in sketcher.js:
*Input box should be updated as user draws molecule
*Input box should be updated as user draws molecule
Summary of changes in arthor.js:
*Change default search type to be 'Substructure'


Summary of changes in arthor-swagger.yaml.js:
Summary of changes in arthor-swagger.yaml.js:
Line 238: Line 243:
#* <source>mkdir /mnt/nfs/home/jjg/arthor_build_from_source</source>
#* <source>mkdir /mnt/nfs/home/jjg/arthor_build_from_source</source>
# Download these latest Arthors and store them in 'arthor_build_from_source/'. [[Arthor Documentation for Future Developer#How To Download Arthor|Here's how to download Arthor.]]
# Download these latest Arthors and store them in 'arthor_build_from_source/'. [[Arthor Documentation for Future Developer#How To Download Arthor|Here's how to download Arthor.]]
#* arthor-3.4.7-source.tar.gz
#* arthor-3.6.1-source.tar.gz
#* arthor-3.4.7-centos7.tar.gz
#* arthor-3.6.1-centos7.tar.gz
# Extract contents from the tar.gz files
# Extract contents from the tar.gz files
#* <source>tar -xvf arthor-3.4.7-source.tar.gz
#* <source>tar -xvf arthor-3.6.1-source.tar.gz
tar -xvf arthor-3.4.7-centos7.tar.gz</source>
tar -xvf arthor-3.6.1-centos7.tar.gz</source>
# Install Apache Maven Arthor dependencies through this script
# Install Apache Maven Arthor dependencies through this script
#* <source>
#* <source>
#!/bin/bash
#!/bin/bash


export ARTHOR_DIR=/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7-centos7/java
export ARTHOR_DIR=/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1-centos8/java
export OS=linux
export OS=linux
export VERSION=3.4.7
export VERSION=3.6.1


mvn install:install-file -Dfile=$ARTHOR_DIR/arthor-jni-${OS}.jar \
mvn install:install-file -Dfile=$ARTHOR_DIR/arthor-jni-${OS}.jar \
Line 265: Line 270:
</source>
</source>
=== Customizing Index.html ===
=== Customizing Index.html ===
Location: /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server/src/main/webapp/WEB-INF/static/index.html
Location: /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server/src/main/webapp/WEB-INF/static/index.html
 
==== Change download options ====
# vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server/src/main/webapp/WEB-INF/static/index.html
# Search for 'arthor_tsv_link'
#* <source>?arthor_tsv_link</source>
# Delete original download links
#*<source>
              <a id="arthor_tsv_link" href="#"> TSV</a>
              <a id="arthor_csv_link" href="#"> CSV</a>
              <a id="arthor_sdf_link" href="#"> SDF</a>
</source>
# Add new download link options
#* <source>
              <a id="arthor_tsv_link_100" href="#"> TSV-100</a>
              <a id="arthor_tsv_link_1k" href="#"> TSV-1,000</a>
              <a id="arthor_tsv_link_10k" href="#"> TSV-10,000</a>
              <a id="arthor_tsv_link_100k" href="#"> TSV-100,000</a>
              <a id="arthor_tsv_link_200k" href="#"> TSV-200,000</a>
              <a id="arthor_tsv_link_300k" href="#"> TSV-300,000</a>
              <a id="arthor_csv_link_100" href="#"> CSV-100</a>
              <a id="arthor_csv_link_1k" href="#"> CSV-1,000</a>
              <a id="arthor_csv_link_10k" href="#"> CSV-10,000</a>
              <a id="arthor_csv_link_100k" href="#"> CSV-100,000</a>
              <a id="arthor_csv_link_200k" href="#"> CSV-200,000</a>
              <a id="arthor_csv_link_300k" href="#"> CSV-300,000</a>
              <a id="arthor_sdf_link_100" href="#"> SDF-100</a>
              <a id="arthor_sdf_link_1k" href="#"> SDF-1,000</a>
              <a id="arthor_sdf_link_10k" href="#"> SDF-10,000</a>
              <a id="arthor_sdf_link_100k" href="#"> SDF-100,000</a>
              <a id="arthor_sdf_link_200k" href="#"> SDF-200,000</a>
              <a id="arthor_sdf_link_300k" href="#"> SDF-300,000</a>
</source>


==== Add contact info and tldr ====
==== Add contact info and tldr ====
# vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server/src/main/webapp/WEB-INF/static/index.html
# vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server/src/main/webapp/WEB-INF/static/index.html
# Search for 'arthor_table_list'
# Search for 'arthor_table_list'
#* <source>?arthor_table_list</source>
#* <source>?arthor_table_list</source>
# Add contact info and a plug to tldr.docking.org after the div block where arthor_table_list is inside of. It should look like this
# Add contact info, a plug to tldr.docking.org, and database link after the div block where arthor_table_list is inside of. It should look like this
#* <source>
#* <source>
       <div class="opt-box-border">
       <div class="opt-box-border">
Line 319: Line 292:
         <label> To Download 100K+ Results</label>
         <label> To Download 100K+ Results</label>
         Sign up for <a href="http://tldr.docking.org/">tldr.docking.org</a> and use arthorbatch
         Sign up for <a href="http://tldr.docking.org/">tldr.docking.org</a> and use arthorbatch
      </div>
      <div class="opt-box-border">
        <label> Database Information</label>
        <a href="https://wiki.docking.org/index.php/Smallworld_and_Arthor_Databases#Smallworld_Databases" target="_blank">Database Information Link</a>
       </div>
       </div>
</source>
</source>
==== Add Database Information Link ====
==== Remove Similarity and Formula Buttons ====
==== Remove Similarity and Formula Buttons ====
# vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server/src/main/webapp/WEB-INF/static/index.html
# vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server/src/main/webapp/WEB-INF/static/index.html
# Search for 'arthor_search_list'
# Search for 'arthor_search_list'
#* <source> ?arthor_search_list </source>
#* <source> ?arthor_search_list </source>
# Delete and Replace the whole 'ul' element block with this
# Delete and Replace the whole 'ul' element block with this
#* <source>
#* <source>
        <ul id="arthor_search_list">
          <li value="Similarity" onclick="setSearchType(this)" class="first">
           <li class="first" value="Substructure" onclick="setSearchType(this)">
            Similarity
           </li><li value="Substructure" onclick="setSearchType(this)">
             Substructure
             Substructure
           </li><li value="SMARTS" onclick="setSearchType(this)" class="last">
           </li><li value="SMARTS" onclick="setSearchType(this)" class="last">
             SMARTS
             SMARTS
           </li>
           </li>
        </ul>
          <!--<li value="Formula" onclick="setSearchType(this)" class="last">
            Formula
          </li>-->
</source>
</source>


=== Customize Index.js ===
=== Customize Index.js ===
Location /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7-source/server-ui/src/index.js
Location /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1-source/server-ui/src/index.js
 
==== Add download option logic ====
# vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7-source/server-ui/src/index.js
# Comment out these lines of code
#* <source>
            if (setDownloadLinks)
              setDownloadLinks(hist_limit);
</source>
#* <source>
                        let limit = arthor.config.WebApp.DefaultDownloadLimit;
                        if (!limit)
                          limit = 500;
</source>
# Search for 'setDownloadLinks(limit)', both the function call and the function call argument, and remove the argument 'limit'.
#* <source>?setDownloadLinks(limit)</source>
# As for the function, add all the logic for the download sizes
#* <source>
function setDownloadLinks() {
  //100 Download Size
  var limit = 100;
  var params = $.param({
                query:  arthor.query,
                type:  arthor.type,
                draw:  0,
                start:  0,
                length: limit,
                flags:  arthor.flags
              });
  var base_url = arthor.url + '/dt/' + normTableNames(arthor.table) + '/search';
  $('#arthor_sdf_link_100').attr('href', base_url + '?fmt=sdf&' + params);
  $('#arthor_tsv_link_100').attr('href', base_url + '?fmt=tsv&' + params);
  $('#arthor_csv_link_100').attr('href', base_url + '?fmt=csv&' + params);
 
  //1k Download Size
  var limit = 1000;
  var params = $.param({
                query:  arthor.query,
                type:  arthor.type,
                draw:  0,
                start:  0,
                length: limit,
                flags:  arthor.flags
              });
  var base_url = arthor.url + '/dt/' + normTableNames(arthor.table) + '/search';
  $('#arthor_sdf_link_1k').attr('href', base_url + '?fmt=sdf&' + params);
  $('#arthor_tsv_link_1k').attr('href', base_url + '?fmt=tsv&' + params);
  $('#arthor_csv_link_1k').attr('href', base_url + '?fmt=csv&' + params);
  //10k Download Size
  var limit = 10000;
  var params = $.param({
                query:  arthor.query,
                type:  arthor.type,
                draw:  0,
                start:  0,
                length: limit,
                flags:  arthor.flags
              });
  var base_url = arthor.url + '/dt/' + normTableNames(arthor.table) + '/search';
  $('#arthor_sdf_link_10k').attr('href', base_url + '?fmt=sdf&' + params);
  $('#arthor_tsv_link_10k').attr('href', base_url + '?fmt=tsv&' + params);
  $('#arthor_csv_link_10k').attr('href', base_url + '?fmt=csv&' + params);
 
  //100k Download Size
  var limit = 100000;
  var params = $.param({
                query:  arthor.query,
                type:  arthor.type,
                draw:  0,
                start:  0,
                length: limit,
                flags:  arthor.flags
              });
  var base_url = arthor.url + '/dt/' + normTableNames(arthor.table) + '/search';
  $('#arthor_sdf_link_100k').attr('href', base_url + '?fmt=sdf&' + params);
  $('#arthor_tsv_link_100k').attr('href', base_url + '?fmt=tsv&' + params);
  $('#arthor_csv_link_100k').attr('href', base_url + '?fmt=csv&' + params);


  //200k Download Size
# Add the zinc20 hyperlink to the Arthor results. Search for this
  var limit = 200000;
  var params = $.param({
                query:  arthor.query,
                type:  arthor.type,
                draw:  0,
                start:  0,
                length: limit,
                flags:  arthor.flags
              });
  var base_url = arthor.url + '/dt/' + normTableNames(arthor.table) + '/search';
  $('#arthor_sdf_link_200k').attr('href', base_url + '?fmt=sdf&' + params);
  $('#arthor_tsv_link_200k').attr('href', base_url + '?fmt=tsv&' + params);
  $('#arthor_csv_link_200k').attr('href', base_url + '?fmt=csv&' + params);
  //300k Download Size
  var limit = 300000;
  var params = $.param({
                query:  arthor.query,
                type:  arthor.type,
                draw:  0,
                start:  0,
                length: limit,
                flags:  arthor.flags
              });
  var base_url = arthor.url + '/dt/' + normTableNames(arthor.table) + '/search';
  $('#arthor_sdf_link_300k').attr('href', base_url + '?fmt=sdf&' + params);
  $('#arthor_tsv_link_300k').attr('href', base_url + '?fmt=tsv&' + params);
  $('#arthor_csv_link_300k').attr('href', base_url + '?fmt=csv&' + params);
 
/*  var params = $.param({
                query:  arthor.query,
                type:  arthor.type,
                draw:  0,
                start:  0,
                length: limit,
                flags:  arthor.flags
              });
  var base_url = arthor.url + '/dt/' + normTableNames(arthor.table) + '/search';
  $('#arthor_sdf_link').attr('href', base_url + '?fmt=sdf&' + params);
  $('#arthor_tsv_link').attr('href', base_url + '?fmt=tsv&' + params);
  $('#arthor_csv_link').attr('href', base_url + '?fmt=csv&' + params);
*/
}
</source>
# Lastly, add the zinc20 hyperlink to the Arthor results. Search for this
#* <source>
#* <source>
"<b>" + id + "</b>"
"<b>" + id + "</b>"
Line 473: Line 337:
                 $info.append(
                 $info.append(
                   $('<tr>').append(
                   $('<tr>').append(
                     $('<td>').append("<b><a target='_blank' href='https://cartblanche22.docking.org/searchZinc/"+id+"'>" + id + "</a></b>",
                     $('<td>').append("<b><a target='_blank' href='https://cartblanche22.docking.org/substance/"+id+"'>" + id + "</a></b>",
                                     "<span class='table_name'>" + table_name + "</span>")));
                                     "<span class='table_name'>" + table_name + "</span>")));
             } else {
             } else {
Line 483: Line 347:


=== Customize Sketcher.js ===
=== Customize Sketcher.js ===
Location: /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7-source/server-ui/src/sketcher.js
Location: /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1-source/server-ui/src/sketcher.js


==== Input Box Updates as User Draws ====
==== Input Box Updates as User Draws ====
#vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7-source/server-ui/src/sketcher.js
#vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1-source/server-ui/src/sketcher.js
#Search for this line "var smiles = event.src.smiles();"
#Search for this line "var smiles = event.src.smiles();"
#* <source>?var smiles = event.src.smiles();</source>
#* <source>?var smiles = event.src.smiles();</source>
#Add this new line below it
#Add this new line below it
#* <source>$('#ar_text_input').val(smiles);</source>
#* <source>$('#ar_text_input').val(smiles);</source>
=== Customize Arthor.js ===
Location: /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server-ui/src/arthor.js
==== Make Substructure Default Search Type ====
#vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server-ui/src/arthor.js
#Search for "let DEFAULT_SEARCH_TYPE"
#* <source>?let DEFAULT_SEARCH_TYPE</source>
#Change parameter to "Substructure"


=== Customize arthor-swagger.yaml ===
=== Customize arthor-swagger.yaml ===
Location: /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server/src/main/webapp/WEB-INF/static/swagger/arthor-swagger.yaml
Location: /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server/src/main/webapp/WEB-INF/static/swagger/arthor-swagger.yaml


==== Change URL Base Path for API Call ====
==== Change URL Base Path for API Call ====
# vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server/src/main/webapp/WEB-INF/static/swagger/arthor-swagger.yaml
# vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server/src/main/webapp/WEB-INF/static/swagger/arthor-swagger.yaml
# Search for "basePath"
# Search for "servers"
#* <source>?basePath</source>
#* <source>?basePath</source>
# Remove "/arthor" and keep argument empty
# Remove "/arthor" and keep argument empty
Line 513: Line 368:
# Install NPM packages and Minify Code
# Install NPM packages and Minify Code
#* <source>
#* <source>
cd /nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server-ui
cd /nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server-ui
npm install
npm install
npx webpack-dev-server
npx webpack-dev-server
Line 521: Line 376:
# Build the war file
# Build the war file
#* <source>
#* <source>
cd /nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server
cd /nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server
mvn install -Pbootable
mvn install -Pbootable
</source>
</source>
# If it works, then the path to new war file is at /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server/target/arthor-server-3.4.7.war
# If it works, then the path to new war file is at /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server/target/arthor-server-3.4.7.war
== Adding Arthor to Systemd (example) ==
# Create service files
#: <source>
touch /etc/systemd/system/arthor.service
</source>
# Add this code block in the service file
#: <source>
[Unit]
Description=Arthor Public Instance
After=network.target
[Service]
Type=exec
Restart=always
RestartSec=3
User=root
ExecStart=/usr/bin/bash /nfs/soft2/arthor_configs/start_arthor_service.sh -public
ExecStop=/bin/kill -15 $MAINPID
[Install]
WantedBy=multi-user.target
</source>
# Change "ExecStart" to other Arthor Instances


== Restarting Arthor Instance(s) Instructions ==
== Restarting Arthor Instance(s) Instructions ==
=== Public and Private Arthor ===
# ssh to "arthor" server and run
#: <source>
systemctl <start|stop|restart> <arthor|arthorp>
</source>
=== ArthorBB, ArthorCC, and ArthorCovalent ===
# ssh to "epyc-a40" server and run
#: <source>
systemctl <start|stop|restart> <arthorbb|arthorcc|arthorcovalent>
</source>
=== Super Private Arthor ===
# Ssh to machine with respective Arthor instance and become root
# Ssh to machine with respective Arthor instance and become root
# execute '''run_arthors_on_reboot.sh''' to show restart all instances on the machine
# execute '''run_arthors_on_reboot.sh''' to show restart all instances on the machine

Latest revision as of 22:22, 19 March 2024

Introduction

Here is the link to Arthor's manual

  • Username: ucsf@nextmovesoftware.com
  • Password: <Ask jjiteam@googlegroups.com>

Arthor configurations and the frontend files are consolidated in /nfs/soft2/arthor_configs/.

/nfs/soft2/arthor_configs/start_arthor_script.sh can start/restart Arthor instances on respective machines.

Launch the script to see the options available.

How To Download Arthor

  1. Ssh to nfs-soft2 and become root. Prepare directory
     mkdir /export/soft2/arthor_configs/arthor-<version> && cd /export/soft2/arthor_configs/arthor-<version>
  2. Download Software with this link
    • Username: ucsf@nextmovesoftware.com
    • Password: <Ask jjiteam@googlegroups.com>
  3. Go to releases. Look for smallworld-java-<version>.tar.gz and copy the link address.
  4. Download using wget
     wget --user ucsf@nextmovesoftware.com --password <Ask jjiteam@googlegroups.com> <link address>
  5. Decompress the file
    •  tar -xvf <file_name>

How To Launch Arthor For The First Time

Prepare Files and Directories

  1. Ssh to nfs-exc and become root
  2. Open a port in the firewall
    firewall-cmd --permanent --add-port=<port_number>/tcp 
    firewall-cmd --reload
  3. Go to Arthor Config directory
    cd /export/soft2/arthor_configs/arthor-<latest_version>
  4. Create an Arthor config file
    vim <name_of_file>.cfg
    • Add these lines in the file. Check the manual for more options.
    DataDir=/local2/public_arthor
    MaxConcurrentSearches=6
    MaxThreadsPerSearch=8
    AutomaticIndex=false
    AsyncHitCountMax=20000
    Depiction=./depict/bot/svg?w=%w&h=%h&svgunits=px&smi=%s&zoom=0.8&sma=%m&smalim=1
    Resolver=https://sw.docking.org/util/smi2mol?smi=%s

Start Arthor Instance

  1. Now ssh into a machine you wish to run an Arthor instance on and become root
  2. Change your shell to bash if you havn't already
    bash
  3. Create a screen
    screen -S <screen_name>
  4. Prepare Arthor Config Path
    export ARTHOR_CONFIG="/nfs/soft2/arthor_configs/arthor-<version>/<name_of_config_file>.cfg"
  5. Launch java
    java -jar -Dserver.port=<port_number> /nfs/soft2/arthor_configs/arthor-<version>/arthor-server-<version>.war

Configuration Details

  • DataDir: This is the directory where the Arthor data files live. Location where the index files will be created and loaded from.
  • MaxConcurrentSearches: Controls the maximum number of searches that can be run concurrently by setting the database pool size. When switching between a large number of databases it can be useful to have a larger pool size, the only trade off is keeping file pointers open.
  • MaxThreadsPerSearch: The number of threads to use for both ATDB and ATFP searches
  • Set AutomaticIndex to false if you don't want new smiles files added to the data directory to be indexed automatically
  • AsyncHitCountMax: The upper-bound for the number of hits to retrieve in background searches.
  • Resolver: Using Smallworld API, allows input box to take in a SMILE format and automatically draw on the board.

Check Arthor manual for more configuration options

How to Build Arthor Databases

We can build Arthor Databases anywhere. Consolidate smiles into one directory so you can index them all one by one.

Just use the script located at /nfs/home/jjg/scripts/arthor_index_script.sh at the directory where you stored the smiles.

Here is the content of the script:

#!/bin/bash

target="*.smi"
threads='48'
version="3.6.1"


export ARTHOR_DIR=/nfs/soft2/arthor_configs/arthor-$version/arthor-$version-centos8/
export PATH=$ARTHOR_DIR/bin/:$PATH

for j in $target
do
        echo 'smi2atdb -v -r -j '$threads' -p '$j' '${j}'.atdb |& tee -a '${j}'_log'
        time smi2atdb -v -r -j $threads -p $j ${j}.atdb |& tee -a ${j}_log
	echo 'smi2atfp -j '$threads' -p '$j' '${j}.atfp' |& tee -a '${j}'_log'
        time smi2atfp -j $threads -p $j ${j}.atfp |& tee -a ${j}_log
done

for i in $target*atdb
do
	echo 'atdb2fp -j '$threads' '$i
        time atdb2fp -j $threads $i
	chmod 744 $i.fp
done

Command Details

smi2atdb creates the atdb files needed for Substructure searching.

  • -v verbose
  • -r Compute and store ring size information in the index allowing ring size (3-10) expressions ([r6] and [Z5])
  • -j is the amount of threads to use to index the smiles file
  • -p stores the position of the original file

atdb2fp makes substructure searching faster

smi2atfp creates atfp files for similarity searching

Setting up Round Table

"Round Table allows you to serve and split chemical searches across multiple host machines. The implementation provides a lightweight proxy that forwards requests to other Arthor host servers that do the actual search. Communication is done using the existing Web APIs.

Setting up Host Server

  1. Ssh to nfs-soft2 and become root
  2. Open a port in the firewall
    firewall-cmd --permanent --add-port=<port_number>/tcp 
    firewall-cmd --reload
  3. Go to Arthor Config Directory
    cd /export/soft2/arthor_configs/arthor-<version>
  4. Create Round Table Head configuration file. Here is an example:
  5. [RoundTable]
    RemoteClient=http://10.20.0.41:8008
    RemoteClient=http://10.20.5.19:8008
    Resolver=https://sw.docking.org/util/smi2mol?smi=%s
  6. Now ssh into a machine you wish to run the round table head on and become root
  7. Change your shell to bash if you havn't already
    bash
  8. Create a screen
    screen -S <screen_name>
  9. Prepare Arthor Config Path
    export ARTHOR_CONFIG="/nfs/soft2/arthor_configs/arthor-<version>/<round_table_head>.cfg"
  10. Launch java
    java -jar /nfs/soft2/arthor_configs/arthor-<version>/arthor-<version>-centos7/java/arthor.jar --httpPort=<port_number>

Active Arthor Instances

Public Arthor

Rocky Linux Machine Port Round Table Data Directory Which Arthor
arthor 10.20.200.100:8080 /local3/public_arthor/ Public Arthor

Private Arthor

Rocky Linux Machine Port Round Table Data Directory Which Arthor
arthor 10.20.200.100:8081 /local3/private_arthor/ Private Arthor

Super Private Arthor

CentOS 7 Machine Port Round Table Data Directory Which Arthor
nun 10.20.0.40:8080 Round table head has no directory Super Private Arthor Round Table Head Node
nun 10.20.0.40:8008 /local2/public_arthor/ Super Private Arthor Database Node
samekh 10.20.0.41:8008 /local2/public_arthor/ Super Private Arthor Database Node

Arthor BB and CC

CentOS 7 Machine Port Data Directory Which Arthor
epyc-A40 10.20.200.92:8081 /local2/arthorbb ArthorBB
epyc-A40 10.20.200.92:8082 /local2/arthorcc ArthorCC

Customizing Arthor Frontend To Our Needs (Arthor 3.6.1)

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 index.html:

  • Add contact info
  • Advertise TLDR
  • Remove button for Formula
  • Database Information Link

Summary of changes in index.js:

  • Hyperlink the results to zinc20

Summary of changes in sketcher.js:

  • Input box should be updated as user draws molecule

Summary of changes in arthor-swagger.yaml.js:

  • Input box should be updated as user draws molecule


Install Prerequisite Packages

  1. Install Apache Maven
    • dnf install maven -y
  2. Install Node Package Manager (NPM)
    • dnf install npm -y
  3. In your home directory, create a new directory to hold the files for the upcoming procedures
    • mkdir /mnt/nfs/home/jjg/arthor_build_from_source
  4. Download these latest Arthors and store them in 'arthor_build_from_source/'. Here's how to download Arthor.
    • arthor-3.6.1-source.tar.gz
    • arthor-3.6.1-centos7.tar.gz
  5. Extract contents from the tar.gz files
    • tar -xvf arthor-3.6.1-source.tar.gz
      tar -xvf arthor-3.6.1-centos7.tar.gz
  6. Install Apache Maven Arthor dependencies through this script
    • #!/bin/bash
      
      export ARTHOR_DIR=/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1-centos8/java
      export OS=linux
      export VERSION=3.6.1
      
      mvn install:install-file -Dfile=$ARTHOR_DIR/arthor-jni-${OS}.jar \
                               -Dpackaging=jar \
                               -DgeneratePom=true \
                               -DartifactId=arthor-jni-${OS} \
                               -DgroupId=com.nextmovesoftware.arthor \
                               -Dversion=$VERSION
      mvn install:install-file -Dfile=$ARTHOR_DIR/arthor-jni.jar \
                               -Dpackaging=jar \
                               -DgeneratePom=true \
                               -DartifactId=arthor-jni \
                               -DgroupId=com.nextmovesoftware.arthor \
                               -Dversion=$VERSION

Customizing Index.html

Location: /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server/src/main/webapp/WEB-INF/static/index.html

Add contact info and tldr

  1. vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server/src/main/webapp/WEB-INF/static/index.html
  2. Search for 'arthor_table_list'
    • ?arthor_table_list
  3. Add contact info, a plug to tldr.docking.org, and database link after the div block where arthor_table_list is inside of. It should look like this
    •       <div class="opt-box-border">
              <label>Databases</label>
              <!-- This will be populated by available databases -->
              <ul id="arthor_table_list">
                <li class="placeholder">Please select a search type</li>
              </ul>
            </div>
            <div class="opt-box-border">
              <label>Ask Questions</label>
              Email us: jjiteam@googlegroups.com
            </div>
            <div class="opt-box-border">
              <label> To Download 100K+ Results</label>
              Sign up for <a href="http://tldr.docking.org/">tldr.docking.org</a> and use arthorbatch
            </div>
            <div class="opt-box-border">
              <label> Database Information</label>
              <a href="https://wiki.docking.org/index.php/Smallworld_and_Arthor_Databases#Smallworld_Databases" target="_blank">Database Information Link</a>
            </div>

Add Database Information Link

Remove Similarity and Formula Buttons

  1. vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server/src/main/webapp/WEB-INF/static/index.html
  2. Search for 'arthor_search_list'
    •  ?arthor_search_list
  3. Delete and Replace the whole 'ul' element block with this
    •           <li value="Similarity" onclick="setSearchType(this)" class="first">
                  Similarity
                </li><li value="Substructure" onclick="setSearchType(this)">
                  Substructure
                </li><li value="SMARTS" onclick="setSearchType(this)" class="last">
                  SMARTS
                </li>
                <!--<li value="Formula" onclick="setSearchType(this)" class="last">
                  Formula
                </li>-->

Customize Index.js

Location /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1-source/server-ui/src/index.js

  1. Add the zinc20 hyperlink to the Arthor results. Search for this
    • "<b>" + id + "</b>"
  2. Delete the contents of the whole else block and replace it with this
    •             if (id.substring(0, 6) == "ZINC00") {
                      $info.append(
                        $('<tr>').append(
                          $('<td>').append("<b><a target='_blank' href='https://zinc20.docking.org/substances/"+id+"'>" + id + "</a></b>",
                                           "<span class='table_name'>" + table_name + "</span>")));
                  } else if (id.substring(0,4) == "ZINC" && id.substring(4,6) != "00") {
                      $info.append(
                        $('<tr>').append(
                          $('<td>').append("<b><a target='_blank' href='https://cartblanche22.docking.org/substance/"+id+"'>" + id + "</a></b>",
                                           "<span class='table_name'>" + table_name + "</span>")));
                  } else {
                      $info.append(
                        $('<tr>').append(
                          $('<td>').append("<b>" + id + "</b>")));
                  }

Customize Sketcher.js

Location: /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1-source/server-ui/src/sketcher.js

Input Box Updates as User Draws

  1. vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1-source/server-ui/src/sketcher.js
  2. Search for this line "var smiles = event.src.smiles();"
    • ?var smiles = event.src.smiles();
  3. Add this new line below it
    • $('#ar_text_input').val(smiles);

Customize arthor-swagger.yaml

Location: /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server/src/main/webapp/WEB-INF/static/swagger/arthor-swagger.yaml

Change URL Base Path for API Call

  1. vim /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server/src/main/webapp/WEB-INF/static/swagger/arthor-swagger.yaml
  2. Search for "servers"
    • ?basePath
  3. Remove "/arthor" and keep argument empty

Compile/Minify Code through NPM

  1. Install NPM packages and Minify Code
    • cd /nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server-ui
      npm install
      npx webpack-dev-server
      npx webpack --mode=production
  2. If the npx commands don't work, try updating node and npm version to the latest one.
  3. Build the war file
    • cd /nfs/home/jjg/arthor_build_from_source/arthor-3.6.1/arthor-3.6.1-source/server
      mvn install -Pbootable
  4. If it works, then the path to new war file is at /mnt/nfs/home/jjg/arthor_build_from_source/arthor-3.4.7/arthor-3.4.7-source/server/target/arthor-server-3.4.7.war

Adding Arthor to Systemd (example)

  1. Create service files
    touch /etc/systemd/system/arthor.service
  2. Add this code block in the service file
    [Unit]
    Description=Arthor Public Instance
    After=network.target
    
    [Service]
    Type=exec
    Restart=always
    RestartSec=3
    User=root
    ExecStart=/usr/bin/bash /nfs/soft2/arthor_configs/start_arthor_service.sh -public
    ExecStop=/bin/kill -15 $MAINPID
    
    [Install]
    WantedBy=multi-user.target
  3. Change "ExecStart" to other Arthor Instances

Restarting Arthor Instance(s) Instructions

Public and Private Arthor

  1. ssh to "arthor" server and run
    systemctl <start|stop|restart> <arthor|arthorp>

ArthorBB, ArthorCC, and ArthorCovalent

  1. ssh to "epyc-a40" server and run
    systemctl <start|stop|restart> <arthorbb|arthorcc|arthorcovalent>

Super Private Arthor

  1. Ssh to machine with respective Arthor instance and become root
  2. execute run_arthors_on_reboot.sh to show restart all instances on the machine
    bash /root/run_arthors_on_reboot.sh
  3. execute start_arthor_script.sh to restart specific Arthor instance. It will show you options to choose from.
    bash /nfs/soft2/arthor_configs/start_arthor_script.sh