<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.docking.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sevigneron</id>
	<title>DISI - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.docking.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sevigneron"/>
	<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=Special:Contributions/Sevigneron"/>
	<updated>2026-07-08T09:54:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16719</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16719"/>
		<updated>2025-06-03T21:49:13Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;CURRENTLY USES TOO MUCH METADATA ON WYNTON, PLEASE FOLLOW THE DOCK-docks TUTORIAL FOR A FIXED VERSION&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Run getposes script following your screen to get a bunch of large mol2 files that you want to run IFP on.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Make a dirlist of your split getposes mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; mol2_dirlist_ifp&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Prep your IFP directory&#039;&#039;&#039;&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Make split filter-XXX.mol2 files of 2000 molecules each to run IFP in parallel on. You can go lower than 2000 if you like, but no need to go higher&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../mol2_dirlist_ifp&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
You can combine all of your smiles from your IFP run using the below script. This makes the file combined.zincid.smiles&lt;br /&gt;
   python ../scripts/concatinate_smiles.py dirlist_combine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Collect Filtered Molecules&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 5 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=5 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16718</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16718"/>
		<updated>2025-06-03T21:48:55Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;CURRENTLY USES TOO MUCH METADATA ON WYNTON, PLEASE FOLLOW THE DOCK-docks TUTORIAL OF A FIXED VERSION&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Run getposes script following your screen to get a bunch of large mol2 files that you want to run IFP on.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Make a dirlist of your split getposes mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; mol2_dirlist_ifp&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Prep your IFP directory&#039;&#039;&#039;&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Make split filter-XXX.mol2 files of 2000 molecules each to run IFP in parallel on. You can go lower than 2000 if you like, but no need to go higher&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../mol2_dirlist_ifp&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
You can combine all of your smiles from your IFP run using the below script. This makes the file combined.zincid.smiles&lt;br /&gt;
   python ../scripts/concatinate_smiles.py dirlist_combine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Collect Filtered Molecules&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 5 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=5 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16717</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16717"/>
		<updated>2025-06-03T21:48:42Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;CURRENTLY USES TOO MUCH METADATA ON WYNTON, PLEASE FOLLOW THE DOCK-docks TUTORIAL OF A FIXED VERSION&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Run getposes script following your screen to get a bunch of large mol2 files that you want to run IFP on.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Make a dirlist of your split getposes mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; mol2_dirlist_ifp&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Prep your IFP directory&#039;&#039;&#039;&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Make split filter-XXX.mol2 files of 2000 molecules each to run IFP in parallel on. You can go lower than 2000 if you like, but no need to go higher&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../mol2_dirlist_ifp&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
You can combine all of your smiles from your IFP run using the below script. This makes the file combined.zincid.smiles&lt;br /&gt;
   python ../scripts/concatinate_smiles.py dirlist_combine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Collect Filtered Molecules&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 5 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=5 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16716</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16716"/>
		<updated>2025-06-03T21:48:17Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
CURRENTLY USES TOO MUCH METADATA ON WYNTON, PLEASE FOLLOW THE DOCK-docks TUTORIAL OF A FIXED VERSION&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Run getposes script following your screen to get a bunch of large mol2 files that you want to run IFP on.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Make a dirlist of your split getposes mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; mol2_dirlist_ifp&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Prep your IFP directory&#039;&#039;&#039;&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Make split filter-XXX.mol2 files of 2000 molecules each to run IFP in parallel on. You can go lower than 2000 if you like, but no need to go higher&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../mol2_dirlist_ifp&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
You can combine all of your smiles from your IFP run using the below script. This makes the file combined.zincid.smiles&lt;br /&gt;
   python ../scripts/concatinate_smiles.py dirlist_combine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Collect Filtered Molecules&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 5 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=5 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16505</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16505"/>
		<updated>2025-01-07T22:24:01Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Run getposes script following your screen to get a bunch of large mol2 files that you want to run IFP on.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Make a dirlist of your split getposes mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; mol2_dirlist_ifp&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Prep your IFP directory&#039;&#039;&#039;&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Make split filter-XXX.mol2 files of 2000 molecules each to run IFP in parallel on. You can go lower than 2000 if you like, but no need to go higher&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../mol2_dirlist_ifp&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
You can combine all of your smiles from your IFP run using the below script. This makes the file combined.zincid.smiles&lt;br /&gt;
   python ../scripts/concatinate_smiles.py dirlist_combine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Collect Filtered Molecules&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 5 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=5 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16491</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16491"/>
		<updated>2025-01-06T22:15:51Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Run getposes script following your screen to get a bunch of large mol2 files that you want to run IFP on.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Make a dirlist of your split getposes mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Prep your IFP directory&#039;&#039;&#039;&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Make split filter-XXX.mol2 files of 2000 molecules each to run IFP in parallel on. You can go lower than 2000 if you like, but no need to go higher&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
You can combine all of your smiles from your IFP run using the below script. This makes the file combined.zincid.smiles&lt;br /&gt;
   python ../scripts/concatinate_smiles.py dirlist_combine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Collect Filtered Molecules&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 5 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=5 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16400</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16400"/>
		<updated>2024-11-09T00:52:53Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Run getposes script following your screen to get a bunch of large mol2 files that you want to run IFP on.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Make a dirlist of your split getposes mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Prep your IFP directory&#039;&#039;&#039;&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Make split filter-XXX.mol2 files of 2000 molecules each to run IFP in parallel on. You can go lower than 2000 if you like, but no need to go higher&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
You can combine all of your smiles from your IFP run using the below script. This makes the file combined.zincid.smiles&lt;br /&gt;
   python ../scripts/concatinate_smiles.py dirlist_combine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Collect Filtered Molecules&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16399</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16399"/>
		<updated>2024-11-09T00:47:18Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Run getposes script following your screen to get a bunch of large mol2 files that you want to run IFP on.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Make a dirlist of your split getposes mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Prep your IFP directory&#039;&#039;&#039;&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Make split filter-XXX.mol2 files to run IFP in parallel on&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
You can combine all of your smiles from your IFP run using the below script. This makes the file combined.zincid.smiles&lt;br /&gt;
   python ../scripts/concatinate_smiles.py dirlist_combine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Collect Filtered Molecules&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16365</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16365"/>
		<updated>2024-10-30T21:08:14Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Run getposes script following your screen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Make a dirlist of your split getposes mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Prep your IFP directory&#039;&#039;&#039;&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Make split filter-XXX.mol2 files to run IFP in parallel on&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
You can combine all of your smiles from your IFP run using the below script. This makes the file combined.zincid.smiles&lt;br /&gt;
   python ../scripts/concatinate_smiles.py dirlist_combine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Collect Filtered Molecules&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16363</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16363"/>
		<updated>2024-10-24T21:35:29Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Run getposes script following your screen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Make a dirlist of your split getposes mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Prep your IFP directory&#039;&#039;&#039;&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Make split filter-XXX.mol2 files to run IFP in parallel on&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Collect Filtered Molecules&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16362</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16362"/>
		<updated>2024-10-24T21:35:00Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Run getposes script following your screen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Make a dirlist of your split getposes mol2 files split mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Prep your IFP directory&#039;&#039;&#039;&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Make split filter-XXX.mol2 files to run IFP in parallel on&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Collect Filtered Molecules&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16361</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16361"/>
		<updated>2024-10-24T21:33:22Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Run getposes script following your screen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Make a dirlist of your split getposes mol2 files split mol2 files for use later&#039;&#039;&#039;&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
&lt;br /&gt;
3. Prep your IFP directory&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Make split filter-XXX.mol2 files to run IFP in parallel on&#039;&#039;&#039;&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   &lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Submit IFP to the cluster&#039;&#039;&#039;&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Check if all runs finished&#039;&#039;&#039;&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Combine Results&#039;&#039;&#039;&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. &#039;&#039;&#039;Collect Filtered Molecules&#039;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16356</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16356"/>
		<updated>2024-10-24T21:06:03Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make a dirlist of your split getposes mol2 files split mol2 files&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
&lt;br /&gt;
3. Prep your IFP directory&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
3. Submit IFP to the cluster&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Check if all runs finished&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
5. Combine Results&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16340</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16340"/>
		<updated>2024-10-09T17:19:09Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
3. Submit IFP to the cluster&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Check if all runs finished&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name-of-receptor.pdb-without-.pdb-at-the-end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
5. Combine Results&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16339</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16339"/>
		<updated>2024-10-09T17:12:06Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, in the pdb file lines for the water molecules change ATOM to HETATM. The name can be HOH or WAT.&lt;br /&gt;
&lt;br /&gt;
3. Submit IFP to the cluster&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Check if all runs finished&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
5. Combine Results&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16338</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16338"/>
		<updated>2024-10-09T17:10:45Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list.&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, change ATOM to HETATM in the pdb file&lt;br /&gt;
&lt;br /&gt;
3. Submit IFP to the cluster&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Check if all runs finished&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
5. Combine Results&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16337</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16337"/>
		<updated>2024-10-09T17:10:14Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, change ATOM to HETATM in the pdb file&lt;br /&gt;
&lt;br /&gt;
3. Submit IFP to the cluster&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Check if all runs finished&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py dirlist_combine&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
5. Combine Results&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16336</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16336"/>
		<updated>2024-10-08T23:25:02Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done&amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, change ATOM to HETATM in the pdb file&lt;br /&gt;
&lt;br /&gt;
3. Submit IFP to the cluster&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Check if all runs finished&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
5. Combine Results&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16335</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16335"/>
		<updated>2024-10-08T23:24:26Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done &amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
Also if you are wanting to filter against interactions with water molecules, change ATOM to HETATM in the pdb file&lt;br /&gt;
&lt;br /&gt;
3. Submit IFP to the cluster&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Check if all runs finished&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
5. Combine Results&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16334</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16334"/>
		<updated>2024-10-08T21:17:53Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done &amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
&lt;br /&gt;
3. Submit IFP to the cluster&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Check if all runs finished&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
5. Combine Results&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
if you need a reminder of all the filters and their order in the combined.interactions.csv, you can find it here by doing: head -1 000/000.interactions.csv&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16333</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16333"/>
		<updated>2024-10-08T21:15:55Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
continue on prepping your working directory&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done &amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
   cp /path/to/rec.crg.pdb .&lt;br /&gt;
   vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
&lt;br /&gt;
3. Submit IFP to the cluster&lt;br /&gt;
   csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Check if all runs finished&lt;br /&gt;
   ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
   python ../scripts/check_finished_notfinished_ifp.py&lt;br /&gt;
If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
to re-run these: &lt;br /&gt;
   csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
5. Combine Results&lt;br /&gt;
   python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
   $1 : ZINC ID&lt;br /&gt;
   $2 : # of H-bond donors&lt;br /&gt;
   $3 : # of H-bond acceptors&lt;br /&gt;
   $4 : # of unsatisfied H-bond donors&lt;br /&gt;
   $5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
where $6 and so on are your additional filters&lt;br /&gt;
   awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16332</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16332"/>
		<updated>2024-10-08T21:13:11Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
   ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
   mkidr ifp&lt;br /&gt;
   cd ifp&lt;br /&gt;
   cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
&lt;br /&gt;
   vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
   filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
   mkdir working&lt;br /&gt;
   cd working&lt;br /&gt;
&lt;br /&gt;
   while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done &amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
&lt;br /&gt;
   ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
cp /path/to/rec.crg.pdb .&lt;br /&gt;
vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
&lt;br /&gt;
csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Combine parallel IFP runs&lt;br /&gt;
ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
python ../scripts/check_finished_notfinished_ifp.py&lt;br /&gt;
   If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
       to re-run these: csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
$1 : ZINC ID&lt;br /&gt;
$2 : # of H-bond donors&lt;br /&gt;
$3 : # of H-bond acceptors&lt;br /&gt;
$4 : # of unsatisfied H-bond donors&lt;br /&gt;
$5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
  where $6 and so on are your additional filters&lt;br /&gt;
awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16331</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16331"/>
		<updated>2024-10-08T21:12:13Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
mkidr ifp&lt;br /&gt;
cd ifp&lt;br /&gt;
cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mkdir working&lt;br /&gt;
cd working&lt;br /&gt;
&lt;br /&gt;
while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done &amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
&lt;br /&gt;
ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
cp /path/to/rec.crg.pdb .&lt;br /&gt;
vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
&lt;br /&gt;
csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Combine parallel IFP runs&lt;br /&gt;
ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
python ../scripts/check_finished_notfinished_ifp.py&lt;br /&gt;
   If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
       to re-run these: csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
$1 : ZINC ID&lt;br /&gt;
$2 : # of H-bond donors&lt;br /&gt;
$3 : # of H-bond acceptors&lt;br /&gt;
$4 : # of unsatisfied H-bond donors&lt;br /&gt;
$5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in ifp_interactions.py&lt;br /&gt;
&lt;br /&gt;
Typical protocol for the lab is to remove any compound with unsatisfied hbond donors and more than 3 unsatisfied hbond acceptors&lt;br /&gt;
awk -F &amp;quot;,&amp;quot; &#039;$4==0 &amp;amp;&amp;amp; $5&amp;lt;=2 &amp;amp;&amp;amp; $6==1&#039; combined.interactions.csv &amp;gt; ifp_filtered.interactions.csv&lt;br /&gt;
  where $6 and so on are your additional filters&lt;br /&gt;
awk -F &amp;quot;,&amp;quot; &#039;{print $1}&#039; ifp_filtered.interactions.csv &amp;gt; ifp_filtered.interactions.zincid&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16330</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16330"/>
		<updated>2024-10-08T21:07:59Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt; ifp_mol2_dirlist&lt;br /&gt;
mkidr ifp&lt;br /&gt;
cd ifp&lt;br /&gt;
cp -r /wynton/group/bks/work/shared/svigneron/IFP_wynton_scrips/scripts .&lt;br /&gt;
vim scripts/ifp_interactions.py &lt;br /&gt;
add in your desired interaction filters to the filters list&lt;br /&gt;
An example for formatting the residue name/number and interaction: &lt;br /&gt;
filters = [[&#039;Hydrogen bond&#039;,&#039;GLY-333&#039;],[&#039;Hydrogen bond&#039;,&#039;ALA-353&#039;],[&#039;Hydrogen bond&#039;,&#039;TYR-368&#039;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mkdir working&lt;br /&gt;
cd working&lt;br /&gt;
&lt;br /&gt;
while read line; do python ../scripts/lc_blazing_fast_separate_mol2_into_smaller_files_called_filter-XXX.py $line 2000 ; done &amp;lt;../../ifp_mol2_dirlist&lt;br /&gt;
&lt;br /&gt;
ls *.mol2 &amp;gt; dirlist&lt;br /&gt;
&lt;br /&gt;
cp /path/to/rec.crg.pdb .&lt;br /&gt;
vim rec.crg.pdb&lt;br /&gt;
Be sure to change any HIE or HID to HIS, and revert back any names for tarted residues as those will not be recognized by LUNA.&lt;br /&gt;
&lt;br /&gt;
csh ../scripts/submit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Combine parallel IFP runs&lt;br /&gt;
ls -d --color=never [0-9]* &amp;gt; dirlist_combine&lt;br /&gt;
python ../scripts/check_finished_notfinished_ifp.py&lt;br /&gt;
   If there are any jobs that failed to run, they will be put into NOT-FINISHED_dirlist&lt;br /&gt;
       to re-run these: csh ../scripts/resubmit.csh /path/to/working /path/to/scripts &amp;lt;name of receptor.pdb without .pdb at the end&amp;gt; NOT-FINISHED_dirlist&lt;br /&gt;
&lt;br /&gt;
python ../scripts/combine_ifp.py dirlist_combine combined&lt;br /&gt;
&lt;br /&gt;
4. Collect Filtered Molecules&lt;br /&gt;
the combined.interactions.csv file lists out each molecules interactions from &lt;br /&gt;
&lt;br /&gt;
$1 : ZINC ID&lt;br /&gt;
$2 : # of H-bond donors&lt;br /&gt;
$3 : # of H-bond acceptors&lt;br /&gt;
$4 : # of unsatisfied H-bond donors&lt;br /&gt;
$5 : # of unsatisfied H-bond acceptors&lt;br /&gt;
and starting with $6 and onwards are the additional interactions specified in&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16322</id>
		<title>IFP Filtering on Wynton</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=IFP_Filtering_on_Wynton&amp;diff=16322"/>
		<updated>2024-10-02T22:11:06Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: Created page with &amp;quot;Seth Vigneron Oct 2024  IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&amp;#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.  1. Run getposes script following your screen.  2. Make split mol2 files to be run in parallel ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seth Vigneron Oct 2024&lt;br /&gt;
&lt;br /&gt;
IFP filtering on wynton proceeds in almost the exact same way as on our gimel cluster. Note the conda environment sourced uses the same older versions of python and LUNA as JK&#039;s original scripts on gimel, so wynton is not using any updated versions of any software and still runs the same IFP protocol.&lt;br /&gt;
&lt;br /&gt;
1. Run getposes script following your screen.&lt;br /&gt;
&lt;br /&gt;
2. Make split mol2 files to be run in parallel&lt;br /&gt;
ls $PWD/poses_extract_for_getposes_parallel_*mol2 &amp;gt;&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=How_to_do_parameter_scanning&amp;diff=16250</id>
		<title>How to do parameter scanning</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=How_to_do_parameter_scanning&amp;diff=16250"/>
		<updated>2024-08-02T15:35:01Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Manually Generating ES/LD Combinations ==&lt;br /&gt;
&lt;br /&gt;
written by Reed Stein, updated 12/2019 so users can specify different low dielectric and ligand desolvation sphere radii&lt;br /&gt;
&lt;br /&gt;
To generate different sized low dielectric and ligand desolvation thin sphere combinations, you must first run blastermaster on your protein/ligand of interest. Once this is finished, make a new directory. Change into the new directory&lt;br /&gt;
and run the following command:&lt;br /&gt;
&lt;br /&gt;
     python ~rstein/zzz.scripts/DOCK_prep_scripts/new_0001_generate_ES_LD_generation.py -p ${FULL_ORIGINAL_BLASTERMASTER_PATH}&lt;br /&gt;
&lt;br /&gt;
The full path to your original blastermaster path is the only required argument. However, you can modify other default values including:&lt;br /&gt;
    1) Radius of low dielectric spheres you want to run: use the -es flag. &lt;br /&gt;
       Default radius for electrostatic spheres is [1.0, 1.3, 1.5, 1.7, 1.9]&lt;br /&gt;
    2) Radius of ligand desolvation spheres you want to run: use the -ld flag. &lt;br /&gt;
       Default radius for ligand desolvation spheres is [0.1, 0.2, 0.3, 0.4, 0.5]&lt;br /&gt;
    3) DMS density: use the -d flag. Default is 10.0 to ensure that the surface is sufficiently coated with spheres when using &lt;br /&gt;
       a smaller sphere radii (typically &amp;lt;0.5 Å). This can be reduced to 1.0 if only larger sphere radii are used.&lt;br /&gt;
    4) Distance from crystallographic ligand: use the -xd flag. Default is 2 Å.&lt;br /&gt;
&lt;br /&gt;
If you wanted to change all, you could use:&lt;br /&gt;
&lt;br /&gt;
    python ~rstein/zzz.scripts/DOCK_prep_scripts/new_0001_generate_ES_LD_generation.py -p ${FULL_ORIGINAL_BLASTERMASTER_PATH} &lt;br /&gt;
           -es 1.1 1.2 1.3 -ld 0.1 0.3 -d 10 -xd 4&lt;br /&gt;
&lt;br /&gt;
This script will submit ligand desolvation jobs to the queue. This should take 15-30 minutes. Once finished, check your spheres and grids by following the steps here:&lt;br /&gt;
   &lt;br /&gt;
    http://wiki.docking.org/index.php/Protein_Target_Preparation_Updated&lt;br /&gt;
&lt;br /&gt;
Then run the following script to combine the ES/LD grids in all combinations:&lt;br /&gt;
&lt;br /&gt;
    python ~rstein/zzz.scripts/DOCK_prep_scripts/new_0002_combine_es_ld_grids_into_combos.py -p ${FULL_ORIGINAL_BLASTERMASTER_PATH}&lt;br /&gt;
&lt;br /&gt;
This will create a new directory called &amp;quot;combo_directories&amp;quot; with docking-ready directories inside. The directories will have the name format &amp;quot;es_{ES_sphere_radius}_ld_{LD_sphere_radius}&amp;quot;. &amp;quot;def&amp;quot; refers to grids taken from your ${FULL_ORIGINAL_BLASTERMASTER_PATH} directory.&lt;br /&gt;
&lt;br /&gt;
If you are going to be docking with DOCK3.8, then the INDOCK files must be inside dockfiles. To set up these directories, run this script instead:&lt;br /&gt;
&lt;br /&gt;
    ~svigneron/work_exj/scripts/new_0002_combine_es_ld_grids_into_combos_dock38.py -p ${FULL_ORIGINAL_BLASTERMASTER_PATH}&lt;br /&gt;
&lt;br /&gt;
These directories are now ready for docking.&lt;br /&gt;
&lt;br /&gt;
== Blastermaster Parameter Scanning == &lt;br /&gt;
&lt;br /&gt;
Written by Jiankun Lyu, 2017/01/18&lt;br /&gt;
&lt;br /&gt;
4/16/2019 - this needs to be updated and will result in discontinuous thin spheres at low radii! &lt;br /&gt;
Use the tutorial above instead. Or use this link to run blastermaster manually:&lt;br /&gt;
&lt;br /&gt;
    http://wiki.docking.org/index.php/Using_thin_spheres_in_DOCK3.7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The hierarchy of the directories:&lt;br /&gt;
&lt;br /&gt;
 thin_spheres_parameter_scanning----- std_dockprep &lt;br /&gt;
                                                                 |&lt;br /&gt;
                                                                 |------ dockfiles&lt;br /&gt;
               |                                                 | &lt;br /&gt;
               |                                                 |----- working&lt;br /&gt;
               |                                                 |&lt;br /&gt;
               |                                                 ------ rec.pdb, xtal-lig.pdb, INDOCK and other files generated balstermaster.py&lt;br /&gt;
               |&lt;br /&gt;
               ------- script ------ dockprep_thin_spheres_in_batches.csh&lt;br /&gt;
                               |&lt;br /&gt;
                               |------ submit_dockprep_thin_spheres.csh&lt;br /&gt;
                               |&lt;br /&gt;
                               |------ dockprep_thin_spheres.csh&lt;br /&gt;
                               |&lt;br /&gt;
                               |------ lig-decoy_enrichment.csh&lt;br /&gt;
                               |&lt;br /&gt;
                               |------ combineScoresAndPoses.csh&lt;br /&gt;
                               |&lt;br /&gt;
                               |------ AUCplot_of-lig-decoys.csh&lt;br /&gt;
                               |&lt;br /&gt;
                               |------ mk_matrix_logAUC.py&lt;br /&gt;
                               |&lt;br /&gt;
                               |------ sph_lib.py&lt;br /&gt;
                               |&lt;br /&gt;
                               |------ pdb_lib.py&lt;br /&gt;
                               |&lt;br /&gt;
                               ------- close_sph.py&lt;br /&gt;
&lt;br /&gt;
1) Make those directories above.&lt;br /&gt;
 mkdir thin_spheres_parameter_scanning&lt;br /&gt;
 cd thin_spheres_parameter_scanning&lt;br /&gt;
 mkdir std_dockprep&lt;br /&gt;
 mkdir script&lt;br /&gt;
&lt;br /&gt;
2) Run blastermaster.py in std_dockprep.  This will generate two directories: working and dockfiles&lt;br /&gt;
&lt;br /&gt;
3) Download sph_lib.py, pdb_lib.py and close_sph.py files into the script directory&lt;br /&gt;
 cd script&lt;br /&gt;
 curl http://docking.org/~tbalius/code/for_dock_3.7/sph_lib.py &amp;gt; sph_lib.py&lt;br /&gt;
 curl http://docking.org/~tbalius/code/for_dock_3.7/pdb_lib.py &amp;gt; pdb_lib.py&lt;br /&gt;
 curl http://docking.org/~tbalius/code/for_dock_3.7/close_sph.py &amp;gt; close_sph.py&lt;br /&gt;
&lt;br /&gt;
4) Copy scripts from my path, and modify as necessary.&lt;br /&gt;
 &lt;br /&gt;
 cd script&lt;br /&gt;
 &lt;br /&gt;
 cp /mnt/nfs/ex5/work/jklyu/large_scale_docking/DRD2/struct_20180322/A122I_add_polarH_mini_HID/thin_spheres_parameter_scanning/scripts/*dockprep* .&lt;br /&gt;
 &lt;br /&gt;
 cp /mnt/nfs/reshwork/jklyu/D2R/scripts/lig-decoy_enrichment_submit.csh .&lt;br /&gt;
 cp /mnt/nfs/reshwork/jklyu/D2R/scripts/combineScoresAndPoses.csh .&lt;br /&gt;
 cp /mnt/nfs/reshwork/jklyu/D2R/scripts/mk_matrix_logAUC.py .&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
5) Run parameter scanning.&lt;br /&gt;
 cd ../ # go back to thin_spheres_parameter_scanning folder&lt;br /&gt;
 csh /path/to/script/dockprep_thin_spheres_in_batches.csh /path/to/script/ /path/to/std_dockprep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note:- you can edit dockprep_thin_spheres_in_batches.csh to include more CPUs in Job Bound&lt;br /&gt;
&lt;br /&gt;
6) make the following subfolders&lt;br /&gt;
&lt;br /&gt;
   mkdir ligands-decoys&lt;br /&gt;
   cd ligands-decoys&lt;br /&gt;
   mkdir ligands&lt;br /&gt;
   mkdir decoys&lt;br /&gt;
&lt;br /&gt;
now copy your decoys.db2.gz to decoys&lt;br /&gt;
now copy your ligands.db2.gz to ligands&lt;br /&gt;
now copy decoys.smi to the folder&lt;br /&gt;
now copy ligands.smi to the folder&lt;br /&gt;
&lt;br /&gt;
7) Submit DOCK and enrichment calculation.&lt;br /&gt;
 csh /path/to/script/lig-decoy_enrichment.csh&lt;br /&gt;
&lt;br /&gt;
8) Combine and analyze the docking results.&lt;br /&gt;
 csh /path/to/script/combineScoresAndPoses.csh #1st change the path inside the script to your own dir&lt;br /&gt;
 csh /path/to/script/AUCplot_of-lig-decoys.csh #1st change the path inside the script to your own dir&lt;br /&gt;
&lt;br /&gt;
9) Visualize the logAUC by heatmap.&lt;br /&gt;
 python /path/to/script/mk_matrix_logAUC.py&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=Generating_decoys_(Reed%27s_way)&amp;diff=16248</id>
		<title>Generating decoys (Reed&#039;s way)</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=Generating_decoys_(Reed%27s_way)&amp;diff=16248"/>
		<updated>2024-07-30T18:59:39Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Written by Reed Stein on April 3, 2018.&lt;br /&gt;
&lt;br /&gt;
updated 5/3/2019&lt;br /&gt;
&lt;br /&gt;
updated 8/15/2019&lt;br /&gt;
&lt;br /&gt;
updated 3/6/2020&lt;br /&gt;
&lt;br /&gt;
updated 5/18/2020&lt;br /&gt;
&lt;br /&gt;
This pipeline will generate property-matched decoys for a set of ligand SMILES. To build ligands yourself, see &amp;quot;ligand prep&amp;quot; in:&lt;br /&gt;
    http://wiki.docking.org/index.php/DOCK_3.7_tutorial_%28Anat%29&lt;br /&gt;
&lt;br /&gt;
All scripts for this tutorial can be found in:&lt;br /&gt;
    /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/&lt;br /&gt;
&lt;br /&gt;
Before running any scripts, make sure to source the current version of Python&lt;br /&gt;
   source /nfs/soft/python/envs/complete/current/env.csh&lt;br /&gt;
&lt;br /&gt;
Additionally, JChem needs to be sourced in your ~/.cshrc file with the command:&lt;br /&gt;
   source /nfs/soft/jchem/current/env.csh&lt;br /&gt;
&lt;br /&gt;
If the below script still not run:&lt;br /&gt;
   source /nfs/soft/dock/versions/dock37/DOCK-3.7-trunk/env.csh&lt;br /&gt;
== Querying ZINC for Protomers ==&lt;br /&gt;
&lt;br /&gt;
This procedure generates decoys for your input ligands by searching through 3D conformers that are already built in ZINC. This procedure is advised if you want decoys to be charge-matched to ligands.&lt;br /&gt;
&lt;br /&gt;
=== Step 1) Setting up directories for Protomers ===&lt;br /&gt;
&lt;br /&gt;
Before starting, you need a SMILES file with the format (SMILES first, &amp;lt;B&amp;gt;unique&amp;lt;/B&amp;gt; ID second):&lt;br /&gt;
   S(Nc1c(O)cc(C(=O)O)cc1)(c2c(scc2)C(=O)O)(=O)=O 116&lt;br /&gt;
&lt;br /&gt;
You also need an input file named &amp;quot;decoy_generation.in&amp;quot; with the following lines:&lt;br /&gt;
    &lt;br /&gt;
    PROTONATE YES&lt;br /&gt;
    MWT 0 125&lt;br /&gt;
    LOGP 0 3.6&lt;br /&gt;
    RB 0 5&lt;br /&gt;
    HBA 0 4&lt;br /&gt;
    HBD 0 3&lt;br /&gt;
    CHARGE 0 2&lt;br /&gt;
    LIGAND TC RANGE 0.0 0.35&lt;br /&gt;
    MINIMUM DECOYS PER LIGAND 20&lt;br /&gt;
    DECOYS PER LIGAND 50&lt;br /&gt;
    MAXIMUM TC BETWEEN DECOYS 0.8&lt;br /&gt;
    TANIMOTO YES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If your input ligand SMILES file is already protonated as you want it, set &amp;quot;PROTONATE NO&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If you want your input ligand SMILES protonated, only protomer SMILES with unique properties will be kept for generating decoys. Therefore, if you have one ligand that exists in 4 tautomers, all of which have identical molecular weight, cLogP, # rotatable bonds, # H-bond acceptors and donors, and net charge, only &amp;lt;B&amp;gt;one&amp;lt;/B&amp;gt; will be maintained for decoy matching. This doesn&#039;t apply if you set &amp;quot;PROTONATE NO&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This file specifies that for each ligand protomer, at least 20 decoys will be retrieved with the following properties:&lt;br /&gt;
     - within +/- 125 Daltons&lt;br /&gt;
     - within +/- 3.6 logP&lt;br /&gt;
     - within +/- 5 rotatable bonds&lt;br /&gt;
     - within +/- 4 hydrogen bond acceptors&lt;br /&gt;
     - within +/- 3 hydrogen bond donors&lt;br /&gt;
     - within +/- 2 charge&lt;br /&gt;
     - 0.35 or less Tanimoto&lt;br /&gt;
     - minimum 20 decoys per ligand protomer, if available&lt;br /&gt;
     - preferred 50 decoys per ligand protomer, if available&lt;br /&gt;
     - the maximum TC between decoy molecules should be 0.8&lt;br /&gt;
     - &amp;quot;TANIMOTO&amp;quot; refers to whether a Tanimoto calculation should be performed - see step 3 for when this is necessary&lt;br /&gt;
&lt;br /&gt;
These are &amp;lt;B&amp;gt;arbitrary&amp;lt;/B&amp;gt;, and you can input your desired minimum and maximum values that decoys can differ by, relative to the ligands. &lt;br /&gt;
&lt;br /&gt;
Once you have created this file, run the following command to create the decoy generation directory:&lt;br /&gt;
&lt;br /&gt;
   python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0000_protonate_setup_dirs.py {SMILES_FILE} {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
Provide a directory name that you want in place of {NEW_DIR_NAME}. This will create the directory with subdirectories named&lt;br /&gt;
&amp;quot;ligand_${number}&amp;quot; for each of the ligands in the SMILES file you input.&lt;br /&gt;
&lt;br /&gt;
=== Step 2) Retrieving protomer decoys from ZINC15 ===&lt;br /&gt;
&lt;br /&gt;
If you have edited the &amp;quot;decoy_generation.in&amp;quot; file which is now located in {NEW_DIR_NAME} as you want, you can run the following command:&lt;br /&gt;
&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0001_qsub_generate_decoys.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
This should take 15 minutes to an hour, depending on how many ligands you input.&lt;br /&gt;
&lt;br /&gt;
=== Step 3) Assigning accepted protomer decoys to each ligand protomer ===&lt;br /&gt;
&lt;br /&gt;
We can assign the property-matched decoys to the ligand protomers. Make sure you have the &amp;quot;decoy_generation_input.in&amp;quot; file from before in {NEW_DIR_NAME}. &lt;br /&gt;
&lt;br /&gt;
To filter the decoys, run the following command:&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0002_qsub_filter_decoys.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
This will run on the queue. A log file called &amp;quot;FILTER_DECOYS.log&amp;quot; will be generated in {NEW_DIR_NAME} with information and any errors.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t get enough decoys, the &amp;quot;decoy_generation.in&amp;quot; file can be modified by changing &amp;quot;MAXIMUM TC BETWEEN DECOYS&amp;quot;, &amp;quot;MINIMUM DECOYS PER LIGAND&amp;quot;, etc.&lt;br /&gt;
To not run the time-consuming Tanimoto calculation between all decoys again, simply add/change this in the &amp;quot;decoy_generation.in&amp;quot; file:&lt;br /&gt;
&lt;br /&gt;
    TANIMOTO NO&lt;br /&gt;
&lt;br /&gt;
If you set Tanimoto to &amp;quot;NO&amp;quot;, make sure that your {NEW_DIR_NAME} still has the original files:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;test_ligdecoy_smiles.smi&amp;quot;&lt;br /&gt;
    &amp;quot;cluster_head.list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise, this step will not run.&lt;br /&gt;
&lt;br /&gt;
If these original files still remain, this will skip the Tanimoto calculation step, and filter property matched decoys based on the new parameters in the &amp;quot;decoy_generation.in&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
If this has completed successfully, you should see files in your {NEW_DIR_NAME} with the format &amp;quot;{LIGAND_ID}_final_property_matched_decoys.txt&amp;quot;. These files contain the ligands and their properties, as well as property-matched decoys that have been assigned to them. These files have the format &amp;quot;SMILES&amp;quot;, &amp;quot;ZINC ID&amp;quot;, &amp;quot;logP&amp;quot;, &amp;quot;#Rotatable Bonds&amp;quot;, &amp;quot;# Hydrogen Bond Donors&amp;quot;, &amp;quot;# Hydrogen Bond Acceptors&amp;quot;, &amp;quot;Charge&amp;quot;, &amp;quot;Protomer SMILES&amp;quot;, and &amp;quot;Tanimoto Coefficient to Ligand&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There should also be files with the format &amp;quot;{LIGAND_ID}_replacements.txt&amp;quot;, which include extra property-matched decoys that were assigned to that ligand. &lt;br /&gt;
&lt;br /&gt;
If you still cannot get enough decoys for your ligands, consider reducing the number of ligands you have by clustering, for example, or using the SMILES decoy generation below, which is not limited to only molecules that are already built in ZINC15.&lt;br /&gt;
&lt;br /&gt;
=== Step 4) Copying decoy .db2.gz files into your directories ===&lt;br /&gt;
&lt;br /&gt;
To copy property-matched decoys into your own directory of choice, run the following command:&lt;br /&gt;
&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0003_copy_decoys_to_new_dir.py {NEW_DIR_NAME} {COPY_TO_DIR}&lt;br /&gt;
&lt;br /&gt;
where {COPY_TO_DIR} is a new directory that will be created where your decoys will be copied into. In this directory, two subdirectories will be created:&lt;br /&gt;
     &amp;quot;ligands&amp;quot; - this includes the input ligands for which there are X number property matched decoys (these are all ligands with &amp;quot;{LIGAND_ID}_final_property_matched_decoys.txt&amp;quot; files in {NEW_DIR_NAME})&lt;br /&gt;
     &amp;quot;decoys&amp;quot; - this will include the decoy .db2.gz files for docking and &amp;quot;decoys.smi&amp;quot; which contains all the SMILES strings for property matched decoys&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: It is possible that all of your ligand protomers were not matched to property-matched decoys. The &amp;quot;ligands.smi&amp;quot; file in {COPY_TO_DIR} will not include these. Make &lt;br /&gt;
sure you do not dock these if you calculate enrichment values.&lt;br /&gt;
&lt;br /&gt;
== Querying ZINC for SMILES ==&lt;br /&gt;
&lt;br /&gt;
This procedure generates decoys for your input ligand SMILES by finding decoy SMILES in ZINC that are property-matched. This procedure will provide decoy SMILES that you can build yourself into 3D models for docking. If you would like to query ZINC for decoy SMILES so that you can build decoys yourself or if your ligands are &amp;gt;400 Da, start here. If not, go to &amp;quot;Querying ZINC for Protomers&amp;quot; to generate decoys that already have 3D models.&lt;br /&gt;
&lt;br /&gt;
=== Step 1) Setting up SMILES directory ===&lt;br /&gt;
&lt;br /&gt;
Before starting, you need a SMILES file with the format (SMILES first, ID second):&lt;br /&gt;
   S(Nc1c(O)cc(C(=O)O)cc1)(c2c(scc2)C(=O)O)(=O)=O 116&lt;br /&gt;
&lt;br /&gt;
You also need an input file named &amp;quot;decoy_generation.in&amp;quot; with the following lines:&lt;br /&gt;
&lt;br /&gt;
    SMILES YES&lt;br /&gt;
    PROTONATE YES&lt;br /&gt;
    MWT 0 125&lt;br /&gt;
    LOGP 0 3.6&lt;br /&gt;
    RB 0 5&lt;br /&gt;
    HBA 0 4&lt;br /&gt;
    HBD 0 3&lt;br /&gt;
    CHARGE 0 2&lt;br /&gt;
    LIGAND TC RANGE 0.0 0.35&lt;br /&gt;
    MINIMUM DECOYS PER LIGAND 20&lt;br /&gt;
    DECOYS PER LIGAND 50&lt;br /&gt;
    MAXIMUM TC BETWEEN DECOYS 0.8&lt;br /&gt;
    TANIMOTO YES&lt;br /&gt;
    GENERATE DECOYS 750&lt;br /&gt;
    &lt;br /&gt;
If your input ligand SMILES file is already protonated as you want it, set &amp;quot;PROTONATE NO&amp;quot;. &amp;quot;SMILES&amp;quot; tells the function you want to query ZINC for SMILES, not built protomers.&lt;br /&gt;
&lt;br /&gt;
This file specifies that for each ligand protomer, {MINIMUM DECOYS PER LIGAND} to {DECOYS PER LIGAND} decoys will be retrieved with the following properties:&lt;br /&gt;
     - within +/- 125 Daltons&lt;br /&gt;
     - within +/- 3.6 logP&lt;br /&gt;
     - within +/- 5 rotatable bonds&lt;br /&gt;
     - within +/- 4 hydrogen bond acceptors&lt;br /&gt;
     - within +/- 3 hydrogen bond donors&lt;br /&gt;
     - within +/- 2 charge&lt;br /&gt;
     - 0.35 or less Tanimoto&lt;br /&gt;
&lt;br /&gt;
&amp;quot;GENERATE DECOYS&amp;quot; specifies how many potential decoys you want to check for property matching with your ligands. A smaller number results in faster decoy generation, but a smaller pool of potential decoys to compare your ligand against. A larger number results in slower decoy generation, and greater likelihood of property-matched decoys for all your ligands. &lt;br /&gt;
&lt;br /&gt;
As with protomers, &amp;quot;MINIMUM DECOYS PER LIGAND&amp;quot; refers to the minimum number of decoys you want for each ligand protomer; &lt;br /&gt;
&lt;br /&gt;
&amp;quot;DECOYS PER LIGAND&amp;quot; refers to your preferred number of decoys for each ligand protomer;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;MAXIMUM TC BETWEEN DECOYS&amp;quot; refers to the maximum Tc allowed between decoys (the lower, the more dissimilar your decoys will be);&lt;br /&gt;
&lt;br /&gt;
and &amp;quot;TANIMOTO&amp;quot; refers to whether the ligand-decoy full Tc matrix should be calculated - this must be done at least once and should not be set to &amp;quot;NO&amp;quot; unless you are re-running step 3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These are &amp;lt;B&amp;gt;arbitrary&amp;lt;/B&amp;gt;, and you can input your desired minimum and maximum values that decoys can differ by, relative to the ligands.  &lt;br /&gt;
&lt;br /&gt;
Once you have created this file, run the following command to create the decoy generation directory:&lt;br /&gt;
&lt;br /&gt;
   python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0000_protonate_setup_dirs.py {SMILES_FILE} {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
Provide a directory name that you want in place of {NEW_DIR_NAME}. This will create the directory with subdirectories named&lt;br /&gt;
&amp;quot;ligand_${number}&amp;quot; for each of the ligands in the SMILES file you input.&lt;br /&gt;
&lt;br /&gt;
=== Step 2) Retrieving SMILES decoys from ZINC15 ===&lt;br /&gt;
&lt;br /&gt;
If you have edited the &amp;quot;decoy_generation.in&amp;quot; file which is now located in {NEW_DIR_NAME} as you want, you can run the following command:&lt;br /&gt;
&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0001_qsub_generate_decoys.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
Jobs will run for 15 minutes to 1-2 hours depending on how many ligands you input.&lt;br /&gt;
&lt;br /&gt;
***There was a new bug in Reed&#039;s original script that Brendan Hall was able to fix (July 30, 2024), run this script instead:&lt;br /&gt;
&lt;br /&gt;
    python /nfs/home/bwhall61/work/decoy_gen_improvement/0001_qsub_generate_decoys.py {NEW_DIR_NAME}&lt;br /&gt;
 &lt;br /&gt;
=== Step 3) Assigning decoys to ligands ===&lt;br /&gt;
&lt;br /&gt;
To assign property matched decoys to your ligand protomers, run the following command:&lt;br /&gt;
&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0002_qsub_filter_decoys.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
*** Again Brendan Hall was able to fix the errors in the above script, run this instead:&lt;br /&gt;
    cd {NEW_DIR_NAME}&lt;br /&gt;
    source /nfs/home/bwhall61/.python_envs/pulp/bin/activate&lt;br /&gt;
    python /nfs/home/bwhall61/work/decoy_gen_improvement/filter_decoys.py&lt;br /&gt;
    &lt;br /&gt;
    this may take some time to run, so it is recommended to run in a screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will run on the queue. As with &amp;quot;Querying ZINC for Protomers&amp;quot;: &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t get enough decoys, the &amp;quot;decoy_generation.in&amp;quot; file can be modified by changing &amp;quot;MAXIMUM TC BETWEEN DECOYS&amp;quot;, &amp;quot;MINIMUM DECOYS PER LIGAND&amp;quot;, etc.&lt;br /&gt;
To not run the time-consuming Tanimoto calculation between all ligands and decoys again, simply add/change this in the &amp;quot;decoy_generation.in&amp;quot; file:&lt;br /&gt;
&lt;br /&gt;
    TANIMOTO NO&lt;br /&gt;
&lt;br /&gt;
If you set Tanimoto to &amp;quot;NO&amp;quot;, make sure that your {NEW_DIR_NAME} still has the original files:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;test_ligdecoy_smiles.smi&amp;quot;&lt;br /&gt;
    &amp;quot;cluster_head.list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise, this step will not run.&lt;br /&gt;
&lt;br /&gt;
If these original files still remain, this will skip the Tanimoto calculation step, and filter property matched decoys based on the new parameters in the &amp;quot;decoy_generation.in&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
If this has completed successfully, you should see files in your {NEW_DIR_NAME} with the format &amp;quot;{LIGAND_ID}_final_property_matched_decoys.txt&amp;quot;. These files have the format &amp;quot;SMILES&amp;quot;, &amp;quot;ZINC ID&amp;quot;, &amp;quot;logP&amp;quot;, &amp;quot;#Rotatable Bonds&amp;quot;, &amp;quot;# Hydrogen Bond Donors&amp;quot;, &amp;quot;# Hydrogen Bond Acceptors&amp;quot;, &amp;quot;Charge&amp;quot;, &amp;quot;Protomer ID&amp;quot;, and &amp;quot;Tanimoto Coefficient to Ligand&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
These files contain the ligands and their properties, as well as property-matched decoys that have been assigned to them. There should also be files with the format &amp;quot;{LIGAND_ID}_replacements.txt&amp;quot;, which include extra property-matched decoys that were assigned to that ligand.&lt;br /&gt;
&lt;br /&gt;
=== Step 4) Setting up ligand/decoy directories for building SMILES ===&lt;br /&gt;
&lt;br /&gt;
If you have queried ZINC for SMILES, you need to build the decoys yourself. To write the SMILES file, run the following command:&lt;br /&gt;
&lt;br /&gt;
   python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0003b_write_out_ligands_decoys.py {NEW_DIR_NAME} {COPY_TO_DIR}&lt;br /&gt;
&lt;br /&gt;
This will create {COPY_TO_DIR} with two subdirectories, &amp;quot;ligands&amp;quot; and &amp;quot;decoys&amp;quot; as well as SMILES files for:&lt;br /&gt;
&lt;br /&gt;
    ligands.smi - this includes the input ligands for which there are X number property matched decoys (these are all ligands with &amp;quot;{LIGAND_ID}_final_property_matched_decoys.txt&amp;quot; files in {NEW_DIR_NAME})&lt;br /&gt;
    decoys.smi  - this includes the canonicalized property-matched decoy SMILES&lt;br /&gt;
    decoy_protomers.smi - this includes the actual property-matched decoy protomer SMILES&lt;br /&gt;
&lt;br /&gt;
SMILES for decoys can now be built.&lt;br /&gt;
&lt;br /&gt;
For decoy building, use the following command:&lt;br /&gt;
&lt;br /&gt;
    setenv DOCKBASE /nfs/soft/dock/versions/dock37/DOCK-3.7-trunk&lt;br /&gt;
    source /nfs/soft/dock/versions/dock37/DOCK-3.7-trunk/env.csh&lt;br /&gt;
    ${DOCKBASE}/ligand/generate/build_database_ligand.sh -H $ph decoy_protomers.smi &amp;lt;B&amp;gt;--pre-tautomerized&amp;lt;/B&amp;gt; --no-db&lt;br /&gt;
&lt;br /&gt;
If not all decoys successfully build, more property matched decoys can be taken from the &amp;quot;{LIGAND_ID}_replacements.txt&amp;quot; files. Additionally, you can build decoys without the &amp;lt;B&amp;gt;--pre-tautomerized&amp;lt;/B&amp;gt; flag:&lt;br /&gt;
&lt;br /&gt;
    ${DOCKBASE}/ligand/generate/build_database_ligand.sh -H $ph &amp;lt;B&amp;gt;decoys.smi&amp;lt;/B&amp;gt; --no-db&lt;br /&gt;
&lt;br /&gt;
This will produce all protomers of each decoy, including the property-matched decoy protomer.&lt;br /&gt;
&lt;br /&gt;
== Visualizing Decoy Properties ==&lt;br /&gt;
=== Visualizing property distributions ===&lt;br /&gt;
&lt;br /&gt;
To visualize the distributions of molecular properties of matched decoys relative to the ligands, run the following command:&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0004_plot_properties.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
There will be 6 images in {NEW_DIR_NAME} for molecular weight, logP, number of rotatable bonds, number of hydrogen bond donors, number of hydrogen bond acceptors, and net charge of ligands and decoys.&lt;br /&gt;
&lt;br /&gt;
=== Visualizing decoy Tanimotos to ligands ===&lt;br /&gt;
&lt;br /&gt;
To visualize how different the matched decoys are to the input ligands, run the following command:&lt;br /&gt;
   python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0005_plot_tanimoto_to_lig.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
There will be a box and whisker plot image in {NEW_DIR_NAME} showing the Tanimotos calculated between each ligand and all decoys.&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=Generating_decoys_(Reed%27s_way)&amp;diff=16247</id>
		<title>Generating decoys (Reed&#039;s way)</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=Generating_decoys_(Reed%27s_way)&amp;diff=16247"/>
		<updated>2024-07-30T18:58:30Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Written by Reed Stein on April 3, 2018.&lt;br /&gt;
&lt;br /&gt;
updated 5/3/2019&lt;br /&gt;
&lt;br /&gt;
updated 8/15/2019&lt;br /&gt;
&lt;br /&gt;
updated 3/6/2020&lt;br /&gt;
&lt;br /&gt;
updated 5/18/2020&lt;br /&gt;
&lt;br /&gt;
This pipeline will generate property-matched decoys for a set of ligand SMILES. To build ligands yourself, see &amp;quot;ligand prep&amp;quot; in:&lt;br /&gt;
    http://wiki.docking.org/index.php/DOCK_3.7_tutorial_%28Anat%29&lt;br /&gt;
&lt;br /&gt;
All scripts for this tutorial can be found in:&lt;br /&gt;
    /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/&lt;br /&gt;
&lt;br /&gt;
Before running any scripts, make sure to source the current version of Python&lt;br /&gt;
   source /nfs/soft/python/envs/complete/current/env.csh&lt;br /&gt;
&lt;br /&gt;
Additionally, JChem needs to be sourced in your ~/.cshrc file with the command:&lt;br /&gt;
   source /nfs/soft/jchem/current/env.csh&lt;br /&gt;
&lt;br /&gt;
If the below script still not run:&lt;br /&gt;
   source /nfs/soft/dock/versions/dock37/DOCK-3.7-trunk/env.csh&lt;br /&gt;
== Querying ZINC for Protomers ==&lt;br /&gt;
&lt;br /&gt;
This procedure generates decoys for your input ligands by searching through 3D conformers that are already built in ZINC. This procedure is advised if you want decoys to be charge-matched to ligands.&lt;br /&gt;
&lt;br /&gt;
=== Step 1) Setting up directories for Protomers ===&lt;br /&gt;
&lt;br /&gt;
Before starting, you need a SMILES file with the format (SMILES first, &amp;lt;B&amp;gt;unique&amp;lt;/B&amp;gt; ID second):&lt;br /&gt;
   S(Nc1c(O)cc(C(=O)O)cc1)(c2c(scc2)C(=O)O)(=O)=O 116&lt;br /&gt;
&lt;br /&gt;
You also need an input file named &amp;quot;decoy_generation.in&amp;quot; with the following lines:&lt;br /&gt;
    &lt;br /&gt;
    PROTONATE YES&lt;br /&gt;
    MWT 0 125&lt;br /&gt;
    LOGP 0 3.6&lt;br /&gt;
    RB 0 5&lt;br /&gt;
    HBA 0 4&lt;br /&gt;
    HBD 0 3&lt;br /&gt;
    CHARGE 0 2&lt;br /&gt;
    LIGAND TC RANGE 0.0 0.35&lt;br /&gt;
    MINIMUM DECOYS PER LIGAND 20&lt;br /&gt;
    DECOYS PER LIGAND 50&lt;br /&gt;
    MAXIMUM TC BETWEEN DECOYS 0.8&lt;br /&gt;
    TANIMOTO YES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If your input ligand SMILES file is already protonated as you want it, set &amp;quot;PROTONATE NO&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If you want your input ligand SMILES protonated, only protomer SMILES with unique properties will be kept for generating decoys. Therefore, if you have one ligand that exists in 4 tautomers, all of which have identical molecular weight, cLogP, # rotatable bonds, # H-bond acceptors and donors, and net charge, only &amp;lt;B&amp;gt;one&amp;lt;/B&amp;gt; will be maintained for decoy matching. This doesn&#039;t apply if you set &amp;quot;PROTONATE NO&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This file specifies that for each ligand protomer, at least 20 decoys will be retrieved with the following properties:&lt;br /&gt;
     - within +/- 125 Daltons&lt;br /&gt;
     - within +/- 3.6 logP&lt;br /&gt;
     - within +/- 5 rotatable bonds&lt;br /&gt;
     - within +/- 4 hydrogen bond acceptors&lt;br /&gt;
     - within +/- 3 hydrogen bond donors&lt;br /&gt;
     - within +/- 2 charge&lt;br /&gt;
     - 0.35 or less Tanimoto&lt;br /&gt;
     - minimum 20 decoys per ligand protomer, if available&lt;br /&gt;
     - preferred 50 decoys per ligand protomer, if available&lt;br /&gt;
     - the maximum TC between decoy molecules should be 0.8&lt;br /&gt;
     - &amp;quot;TANIMOTO&amp;quot; refers to whether a Tanimoto calculation should be performed - see step 3 for when this is necessary&lt;br /&gt;
&lt;br /&gt;
These are &amp;lt;B&amp;gt;arbitrary&amp;lt;/B&amp;gt;, and you can input your desired minimum and maximum values that decoys can differ by, relative to the ligands. &lt;br /&gt;
&lt;br /&gt;
Once you have created this file, run the following command to create the decoy generation directory:&lt;br /&gt;
&lt;br /&gt;
   python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0000_protonate_setup_dirs.py {SMILES_FILE} {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
Provide a directory name that you want in place of {NEW_DIR_NAME}. This will create the directory with subdirectories named&lt;br /&gt;
&amp;quot;ligand_${number}&amp;quot; for each of the ligands in the SMILES file you input.&lt;br /&gt;
&lt;br /&gt;
=== Step 2) Retrieving protomer decoys from ZINC15 ===&lt;br /&gt;
&lt;br /&gt;
If you have edited the &amp;quot;decoy_generation.in&amp;quot; file which is now located in {NEW_DIR_NAME} as you want, you can run the following command:&lt;br /&gt;
&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0001_qsub_generate_decoys.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
This should take 15 minutes to an hour, depending on how many ligands you input.&lt;br /&gt;
&lt;br /&gt;
=== Step 3) Assigning accepted protomer decoys to each ligand protomer ===&lt;br /&gt;
&lt;br /&gt;
We can assign the property-matched decoys to the ligand protomers. Make sure you have the &amp;quot;decoy_generation_input.in&amp;quot; file from before in {NEW_DIR_NAME}. &lt;br /&gt;
&lt;br /&gt;
To filter the decoys, run the following command:&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0002_qsub_filter_decoys.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
This will run on the queue. A log file called &amp;quot;FILTER_DECOYS.log&amp;quot; will be generated in {NEW_DIR_NAME} with information and any errors.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t get enough decoys, the &amp;quot;decoy_generation.in&amp;quot; file can be modified by changing &amp;quot;MAXIMUM TC BETWEEN DECOYS&amp;quot;, &amp;quot;MINIMUM DECOYS PER LIGAND&amp;quot;, etc.&lt;br /&gt;
To not run the time-consuming Tanimoto calculation between all decoys again, simply add/change this in the &amp;quot;decoy_generation.in&amp;quot; file:&lt;br /&gt;
&lt;br /&gt;
    TANIMOTO NO&lt;br /&gt;
&lt;br /&gt;
If you set Tanimoto to &amp;quot;NO&amp;quot;, make sure that your {NEW_DIR_NAME} still has the original files:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;test_ligdecoy_smiles.smi&amp;quot;&lt;br /&gt;
    &amp;quot;cluster_head.list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise, this step will not run.&lt;br /&gt;
&lt;br /&gt;
If these original files still remain, this will skip the Tanimoto calculation step, and filter property matched decoys based on the new parameters in the &amp;quot;decoy_generation.in&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
If this has completed successfully, you should see files in your {NEW_DIR_NAME} with the format &amp;quot;{LIGAND_ID}_final_property_matched_decoys.txt&amp;quot;. These files contain the ligands and their properties, as well as property-matched decoys that have been assigned to them. These files have the format &amp;quot;SMILES&amp;quot;, &amp;quot;ZINC ID&amp;quot;, &amp;quot;logP&amp;quot;, &amp;quot;#Rotatable Bonds&amp;quot;, &amp;quot;# Hydrogen Bond Donors&amp;quot;, &amp;quot;# Hydrogen Bond Acceptors&amp;quot;, &amp;quot;Charge&amp;quot;, &amp;quot;Protomer SMILES&amp;quot;, and &amp;quot;Tanimoto Coefficient to Ligand&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There should also be files with the format &amp;quot;{LIGAND_ID}_replacements.txt&amp;quot;, which include extra property-matched decoys that were assigned to that ligand. &lt;br /&gt;
&lt;br /&gt;
If you still cannot get enough decoys for your ligands, consider reducing the number of ligands you have by clustering, for example, or using the SMILES decoy generation below, which is not limited to only molecules that are already built in ZINC15.&lt;br /&gt;
&lt;br /&gt;
=== Step 4) Copying decoy .db2.gz files into your directories ===&lt;br /&gt;
&lt;br /&gt;
To copy property-matched decoys into your own directory of choice, run the following command:&lt;br /&gt;
&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0003_copy_decoys_to_new_dir.py {NEW_DIR_NAME} {COPY_TO_DIR}&lt;br /&gt;
&lt;br /&gt;
where {COPY_TO_DIR} is a new directory that will be created where your decoys will be copied into. In this directory, two subdirectories will be created:&lt;br /&gt;
     &amp;quot;ligands&amp;quot; - this includes the input ligands for which there are X number property matched decoys (these are all ligands with &amp;quot;{LIGAND_ID}_final_property_matched_decoys.txt&amp;quot; files in {NEW_DIR_NAME})&lt;br /&gt;
     &amp;quot;decoys&amp;quot; - this will include the decoy .db2.gz files for docking and &amp;quot;decoys.smi&amp;quot; which contains all the SMILES strings for property matched decoys&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: It is possible that all of your ligand protomers were not matched to property-matched decoys. The &amp;quot;ligands.smi&amp;quot; file in {COPY_TO_DIR} will not include these. Make &lt;br /&gt;
sure you do not dock these if you calculate enrichment values.&lt;br /&gt;
&lt;br /&gt;
== Querying ZINC for SMILES ==&lt;br /&gt;
&lt;br /&gt;
This procedure generates decoys for your input ligand SMILES by finding decoy SMILES in ZINC that are property-matched. This procedure will provide decoy SMILES that you can build yourself into 3D models for docking. If you would like to query ZINC for decoy SMILES so that you can build decoys yourself or if your ligands are &amp;gt;400 Da, start here. If not, go to &amp;quot;Querying ZINC for Protomers&amp;quot; to generate decoys that already have 3D models.&lt;br /&gt;
&lt;br /&gt;
=== Step 1) Setting up SMILES directory ===&lt;br /&gt;
&lt;br /&gt;
Before starting, you need a SMILES file with the format (SMILES first, ID second):&lt;br /&gt;
   S(Nc1c(O)cc(C(=O)O)cc1)(c2c(scc2)C(=O)O)(=O)=O 116&lt;br /&gt;
&lt;br /&gt;
You also need an input file named &amp;quot;decoy_generation.in&amp;quot; with the following lines:&lt;br /&gt;
&lt;br /&gt;
    SMILES YES&lt;br /&gt;
    PROTONATE YES&lt;br /&gt;
    MWT 0 125&lt;br /&gt;
    LOGP 0 3.6&lt;br /&gt;
    RB 0 5&lt;br /&gt;
    HBA 0 4&lt;br /&gt;
    HBD 0 3&lt;br /&gt;
    CHARGE 0 2&lt;br /&gt;
    LIGAND TC RANGE 0.0 0.35&lt;br /&gt;
    MINIMUM DECOYS PER LIGAND 20&lt;br /&gt;
    DECOYS PER LIGAND 50&lt;br /&gt;
    MAXIMUM TC BETWEEN DECOYS 0.8&lt;br /&gt;
    TANIMOTO YES&lt;br /&gt;
    GENERATE DECOYS 750&lt;br /&gt;
    &lt;br /&gt;
If your input ligand SMILES file is already protonated as you want it, set &amp;quot;PROTONATE NO&amp;quot;. &amp;quot;SMILES&amp;quot; tells the function you want to query ZINC for SMILES, not built protomers.&lt;br /&gt;
&lt;br /&gt;
This file specifies that for each ligand protomer, {MINIMUM DECOYS PER LIGAND} to {DECOYS PER LIGAND} decoys will be retrieved with the following properties:&lt;br /&gt;
     - within +/- 125 Daltons&lt;br /&gt;
     - within +/- 3.6 logP&lt;br /&gt;
     - within +/- 5 rotatable bonds&lt;br /&gt;
     - within +/- 4 hydrogen bond acceptors&lt;br /&gt;
     - within +/- 3 hydrogen bond donors&lt;br /&gt;
     - within +/- 2 charge&lt;br /&gt;
     - 0.35 or less Tanimoto&lt;br /&gt;
&lt;br /&gt;
&amp;quot;GENERATE DECOYS&amp;quot; specifies how many potential decoys you want to check for property matching with your ligands. A smaller number results in faster decoy generation, but a smaller pool of potential decoys to compare your ligand against. A larger number results in slower decoy generation, and greater likelihood of property-matched decoys for all your ligands. &lt;br /&gt;
&lt;br /&gt;
As with protomers, &amp;quot;MINIMUM DECOYS PER LIGAND&amp;quot; refers to the minimum number of decoys you want for each ligand protomer; &lt;br /&gt;
&lt;br /&gt;
&amp;quot;DECOYS PER LIGAND&amp;quot; refers to your preferred number of decoys for each ligand protomer;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;MAXIMUM TC BETWEEN DECOYS&amp;quot; refers to the maximum Tc allowed between decoys (the lower, the more dissimilar your decoys will be);&lt;br /&gt;
&lt;br /&gt;
and &amp;quot;TANIMOTO&amp;quot; refers to whether the ligand-decoy full Tc matrix should be calculated - this must be done at least once and should not be set to &amp;quot;NO&amp;quot; unless you are re-running step 3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These are &amp;lt;B&amp;gt;arbitrary&amp;lt;/B&amp;gt;, and you can input your desired minimum and maximum values that decoys can differ by, relative to the ligands.  &lt;br /&gt;
&lt;br /&gt;
Once you have created this file, run the following command to create the decoy generation directory:&lt;br /&gt;
&lt;br /&gt;
   python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0000_protonate_setup_dirs.py {SMILES_FILE} {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
Provide a directory name that you want in place of {NEW_DIR_NAME}. This will create the directory with subdirectories named&lt;br /&gt;
&amp;quot;ligand_${number}&amp;quot; for each of the ligands in the SMILES file you input.&lt;br /&gt;
&lt;br /&gt;
=== Step 2) Retrieving SMILES decoys from ZINC15 ===&lt;br /&gt;
&lt;br /&gt;
If you have edited the &amp;quot;decoy_generation.in&amp;quot; file which is now located in {NEW_DIR_NAME} as you want, you can run the following command:&lt;br /&gt;
&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0001_qsub_generate_decoys.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
Jobs will run for 15 minutes to 1-2 hours depending on how many ligands you input.&lt;br /&gt;
&lt;br /&gt;
***There was a new bug in Reed&#039;s original script that Brendan Hall was able to fix (July 30, 2024), run this script instead:&lt;br /&gt;
&lt;br /&gt;
    python /nfs/home/bwhall61/work/decoy_gen_improvement/0001_qsub_generate_decoys.py {NEW_DIR_NAME}&lt;br /&gt;
 &lt;br /&gt;
=== Step 3) Assigning decoys to ligands ===&lt;br /&gt;
&lt;br /&gt;
To assign property matched decoys to your ligand protomers, run the following command:&lt;br /&gt;
&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0002_qsub_filter_decoys.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
*** Again Brendan Hall was able to fix the errors in the above script, run this instead:&lt;br /&gt;
    cd {NEW_DIR_NAME}&lt;br /&gt;
    source /nfs/home/bwhall61/.python_envs/pulp/bin/activate&lt;br /&gt;
    python /nfs/home/bwhall61/work/decoy_gen_improvement/filter_decoys.py&lt;br /&gt;
&lt;br /&gt;
  this may take some time to run, so it is recommended to run in a screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will run on the queue. As with &amp;quot;Querying ZINC for Protomers&amp;quot;: &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t get enough decoys, the &amp;quot;decoy_generation.in&amp;quot; file can be modified by changing &amp;quot;MAXIMUM TC BETWEEN DECOYS&amp;quot;, &amp;quot;MINIMUM DECOYS PER LIGAND&amp;quot;, etc.&lt;br /&gt;
To not run the time-consuming Tanimoto calculation between all ligands and decoys again, simply add/change this in the &amp;quot;decoy_generation.in&amp;quot; file:&lt;br /&gt;
&lt;br /&gt;
    TANIMOTO NO&lt;br /&gt;
&lt;br /&gt;
If you set Tanimoto to &amp;quot;NO&amp;quot;, make sure that your {NEW_DIR_NAME} still has the original files:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;test_ligdecoy_smiles.smi&amp;quot;&lt;br /&gt;
    &amp;quot;cluster_head.list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise, this step will not run.&lt;br /&gt;
&lt;br /&gt;
If these original files still remain, this will skip the Tanimoto calculation step, and filter property matched decoys based on the new parameters in the &amp;quot;decoy_generation.in&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
If this has completed successfully, you should see files in your {NEW_DIR_NAME} with the format &amp;quot;{LIGAND_ID}_final_property_matched_decoys.txt&amp;quot;. These files have the format &amp;quot;SMILES&amp;quot;, &amp;quot;ZINC ID&amp;quot;, &amp;quot;logP&amp;quot;, &amp;quot;#Rotatable Bonds&amp;quot;, &amp;quot;# Hydrogen Bond Donors&amp;quot;, &amp;quot;# Hydrogen Bond Acceptors&amp;quot;, &amp;quot;Charge&amp;quot;, &amp;quot;Protomer ID&amp;quot;, and &amp;quot;Tanimoto Coefficient to Ligand&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
These files contain the ligands and their properties, as well as property-matched decoys that have been assigned to them. There should also be files with the format &amp;quot;{LIGAND_ID}_replacements.txt&amp;quot;, which include extra property-matched decoys that were assigned to that ligand.&lt;br /&gt;
&lt;br /&gt;
=== Step 4) Setting up ligand/decoy directories for building SMILES ===&lt;br /&gt;
&lt;br /&gt;
If you have queried ZINC for SMILES, you need to build the decoys yourself. To write the SMILES file, run the following command:&lt;br /&gt;
&lt;br /&gt;
   python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0003b_write_out_ligands_decoys.py {NEW_DIR_NAME} {COPY_TO_DIR}&lt;br /&gt;
&lt;br /&gt;
This will create {COPY_TO_DIR} with two subdirectories, &amp;quot;ligands&amp;quot; and &amp;quot;decoys&amp;quot; as well as SMILES files for:&lt;br /&gt;
&lt;br /&gt;
    ligands.smi - this includes the input ligands for which there are X number property matched decoys (these are all ligands with &amp;quot;{LIGAND_ID}_final_property_matched_decoys.txt&amp;quot; files in {NEW_DIR_NAME})&lt;br /&gt;
    decoys.smi  - this includes the canonicalized property-matched decoy SMILES&lt;br /&gt;
    decoy_protomers.smi - this includes the actual property-matched decoy protomer SMILES&lt;br /&gt;
&lt;br /&gt;
SMILES for decoys can now be built.&lt;br /&gt;
&lt;br /&gt;
For decoy building, use the following command:&lt;br /&gt;
&lt;br /&gt;
    setenv DOCKBASE /nfs/soft/dock/versions/dock37/DOCK-3.7-trunk&lt;br /&gt;
    source /nfs/soft/dock/versions/dock37/DOCK-3.7-trunk/env.csh&lt;br /&gt;
    ${DOCKBASE}/ligand/generate/build_database_ligand.sh -H $ph decoy_protomers.smi &amp;lt;B&amp;gt;--pre-tautomerized&amp;lt;/B&amp;gt; --no-db&lt;br /&gt;
&lt;br /&gt;
If not all decoys successfully build, more property matched decoys can be taken from the &amp;quot;{LIGAND_ID}_replacements.txt&amp;quot; files. Additionally, you can build decoys without the &amp;lt;B&amp;gt;--pre-tautomerized&amp;lt;/B&amp;gt; flag:&lt;br /&gt;
&lt;br /&gt;
    ${DOCKBASE}/ligand/generate/build_database_ligand.sh -H $ph &amp;lt;B&amp;gt;decoys.smi&amp;lt;/B&amp;gt; --no-db&lt;br /&gt;
&lt;br /&gt;
This will produce all protomers of each decoy, including the property-matched decoy protomer.&lt;br /&gt;
&lt;br /&gt;
== Visualizing Decoy Properties ==&lt;br /&gt;
=== Visualizing property distributions ===&lt;br /&gt;
&lt;br /&gt;
To visualize the distributions of molecular properties of matched decoys relative to the ligands, run the following command:&lt;br /&gt;
    python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0004_plot_properties.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
There will be 6 images in {NEW_DIR_NAME} for molecular weight, logP, number of rotatable bonds, number of hydrogen bond donors, number of hydrogen bond acceptors, and net charge of ligands and decoys.&lt;br /&gt;
&lt;br /&gt;
=== Visualizing decoy Tanimotos to ligands ===&lt;br /&gt;
&lt;br /&gt;
To visualize how different the matched decoys are to the input ligands, run the following command:&lt;br /&gt;
   python /mnt/nfs/home/rstein/zzz.scripts/new_DUDE_SCRIPTS/0005_plot_tanimoto_to_lig.py {NEW_DIR_NAME}&lt;br /&gt;
&lt;br /&gt;
There will be a box and whisker plot image in {NEW_DIR_NAME} showing the Tanimotos calculated between each ligand and all decoys.&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=Hit_picking_party&amp;diff=16142</id>
		<title>Hit picking party</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=Hit_picking_party&amp;diff=16142"/>
		<updated>2024-06-06T17:10:28Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: /* Before the party */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before we buy compounds, we have a hit picking party.&lt;br /&gt;
&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
= Before the party =&lt;br /&gt;
The investigator who performed the virtual screen looks critically at the results, selecting perhaps a dozen or two interesting compounds from among the top 500. Several copies of the top 500 list are printed, sometimes with additional supporting documentation, and distributed to the participants. Check [[CSD]] data for compound pose information. The [[Pka|pKa]] of each molecule can be checked. Think about specific ligand-protein interactions (A Medicinal Chemist’s Guide to Molecular Interactions, J. Med. Chem. 2010, 53, 5061–5084 DOI: 10.1021/jm100112j, can be a nice resource for thinking of what to look for). Think about [[reactive groups]] for molecules. Think about PAINS http://pasilla.health.unm.edu/tomcat/biocomp/smartsfilter&lt;br /&gt;
&lt;br /&gt;
= During the party = &lt;br /&gt;
We take a good look at the site, and any crystallographic ligands or known experimental ligands. Think about enthalpic and entropic contributions to the binding. Think about possible water structure. Think of receptor flexibility, especially His, Gln, Asn, Ser, Tyr, Thr. Look for charged residues. Look at the surface colored by charge to look for greasy patches. &lt;br /&gt;
&lt;br /&gt;
Look at one ligand at a time, and rate each compound (e.g. 1, 2, or 3 checkmarks). People speak out, making favorable and unfavorable comments about each ligand. Broken molecules are rapidly ignored.&lt;br /&gt;
&lt;br /&gt;
Watch out for very high or very low calculated LogP.  Watch for weird conformations and weird protonation states and weird tautomeric forms. ZINC is imperfect, use your judgement. Watch out for super floppy molecules.  Watch out for buried polarity or missed opportunities. hydroxide is the worst. If hydroxide ain&#039;t happy ain&#039;t nobody happy.&lt;br /&gt;
&lt;br /&gt;
= After the party = &lt;br /&gt;
The investigator purchases compounds as discussed and has them tested experimentally. Ideally, a report of the fate of each compound can be shared with other members of the group within a few weeks.  We try to test at as high concentration as the assay will allow.  We like to order 10mg so that we can test for purity, identity, and also repeat the experiment.&lt;br /&gt;
&lt;br /&gt;
= Epilogue = &lt;br /&gt;
Sometimes we go through several iterations. If no hits arise, we go back to the drawing board. We try to incorporate all available information, both in the modeling, and in the judgement of the ligands.   Watch out for aggregators, and be sure to control for these during the experiments.  [http://advisor.docking.org/]&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Docking]]&lt;br /&gt;
[[Category:Narratives]]&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=Building_The_3D_Pipeline_ZINC22&amp;diff=16141</id>
		<title>Building The 3D Pipeline ZINC22</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=Building_The_3D_Pipeline_ZINC22&amp;diff=16141"/>
		<updated>2024-06-04T22:46:59Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: /* Script Arguments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The 3D pipeline is a collection of scripts and software packages that enable the massively parallel creation of dockable 3D molecules.&lt;br /&gt;
&lt;br /&gt;
= EZ Setup =&lt;br /&gt;
&lt;br /&gt;
== BKS Cluster ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
source /nfs/soft/dock/versions/dock38/pipeline_3D_ligands/env.(sh|csh)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This environment will set up most of the required variables for you, as well as adds the submission scripts to your PATH, which means submission can be as simple as:&lt;br /&gt;
&lt;br /&gt;
bash&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$HOME/myligands.smi&lt;br /&gt;
export OUTPUT_DEST=$HOME/myoutput&lt;br /&gt;
submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
csh&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
setenv INPUT_FILE $HOME/myligands.smi&lt;br /&gt;
setenv OUTPUT_DEST $HOME/myoutput&lt;br /&gt;
submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wynton Cluster ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
source /wynton/group/bks/soft/pipeline_3D_ligands/env.(sh|csh)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to the BKS example, this environment will set most of the required variables for you&lt;br /&gt;
&lt;br /&gt;
bash&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$HOME/myligands.smi&lt;br /&gt;
export OUTPUT_DEST=$HOME/myoutput&lt;br /&gt;
submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
csh&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
setenv INPUT_FILE $HOME/myligands.smi&lt;br /&gt;
setenv OUTPUT_DEST $HOME/myoutput&lt;br /&gt;
submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Repackaging Output For Docking =&lt;br /&gt;
&lt;br /&gt;
The output of the 3D pipeline scripts will be a number of tar.gz files with roughly LINES_PER_JOB molecules contained per package.&lt;br /&gt;
&lt;br /&gt;
It is standard practice to repackage these smaller packages into larger packages for docking, as 50 molecules do not take long to process with DOCK.&lt;br /&gt;
&lt;br /&gt;
See this wiki page for how to do this: [[Repackaging_DB2_DOCK38]]&lt;br /&gt;
&lt;br /&gt;
= Script Arguments =&lt;br /&gt;
&lt;br /&gt;
Main submission scripts are named submit-all-jobs-slurm.bash and submit-all-jobs-sge.bash. These scripts use environment variables as arguments instead of usual command line ones.&lt;br /&gt;
&lt;br /&gt;
E.g, on bash you would pass one of these arguments like so:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;export INPUT_FILE=$PWD/example.smi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or on csh:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;setenv INPUT_FILE $PWD/example.smi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to running the script.&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== INPUT_FILE ====&lt;br /&gt;
&lt;br /&gt;
The input .smi file to be built. This file should contain only two columns of data: (SMILES, NAME) with no header.&lt;br /&gt;
&lt;br /&gt;
==== OUTPUT_DEST ====&lt;br /&gt;
&lt;br /&gt;
The base directory for output to be stored. The script will create a sub-directory here named $INPUT_FILE.batch-3d.d&lt;br /&gt;
&lt;br /&gt;
Within this output directory there are 3 sub-directories:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; in &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; log &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In contains the input file split into fragments and sub-fragments. By default the script first splits the input file into batches of 50000, then splits those batches into sub-batches of 50. Each individual job works on one of these sub-batches. Each array batch job works on one of the batches of 50000. All of the other directories alongside &#039;in&#039; share the same directory structure.&lt;br /&gt;
&lt;br /&gt;
Log contains log messages from the jobs. If you are re-submitting a file, be aware that log messages from previous runs on this file will be overwritten.&lt;br /&gt;
&lt;br /&gt;
Out contains tar.gz output from each job. The tarballs should contain a number of 3d molecule formats for each molecule in the batch, including 1 or more db2.gz files.&lt;br /&gt;
&lt;br /&gt;
==== SOFT_HOME ====&lt;br /&gt;
&lt;br /&gt;
Where software tarballs for the pipeline are stored. Symbolic links should be maintained in this directory according to the rules described in the &amp;quot;software arguments&amp;quot; section of this page. If you&#039;re sourcing a premade environment, don&#039;t worry about setting this value.&lt;br /&gt;
&lt;br /&gt;
==== LICENSE_HOME ====&lt;br /&gt;
&lt;br /&gt;
Where software licenses are stored. Currently our licensed software includes jchem and openeye, licenses must be named .jchem-license.cxl and .oe-license.txt respectively. if you&#039;re sourcing a premade environment, don&#039;t worry about setting this value.&lt;br /&gt;
&lt;br /&gt;
== Script Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== SHRTCACHE ====&lt;br /&gt;
&lt;br /&gt;
The base working directory for the script. By default it is /scratch&lt;br /&gt;
&lt;br /&gt;
==== LONGCACHE ====&lt;br /&gt;
&lt;br /&gt;
The base directory for persistent files that are shared between jobs to go (i.e where software is installed). By default it is /scratch.&lt;br /&gt;
&lt;br /&gt;
==== CORINA_MAX_CONFS ====&lt;br /&gt;
&lt;br /&gt;
How many nitrogen flapping configurations of each protomer corina should generate. By default only one is generated.&lt;br /&gt;
&lt;br /&gt;
==== pH_LEVEL ====&lt;br /&gt;
&lt;br /&gt;
Sets what pH to generate the compound(s) at. Default is a pH of 7.4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: For addition of new variables, that variable needs also needs to be added to the &#039;optional_vars&#039; line of submit-all.bash&lt;br /&gt;
&lt;br /&gt;
== Omega Arguments ==&lt;br /&gt;
&lt;br /&gt;
These parameters correspond to torsion driving parameters described in the omega manual: https://docs.eyesopen.com/applications/omega/omega/omega_opt_params.html#torsion-driving-parameters&lt;br /&gt;
&lt;br /&gt;
If you&#039;d like to know more about how these parameters function, cross reference with the manual page.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_MAX_CONFS ====&lt;br /&gt;
&lt;br /&gt;
Maximum configurations OMEGA will generate, default 600.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_ENERGY_WINDOW ====&lt;br /&gt;
&lt;br /&gt;
Torsion energy window, if set to zero OMEGA will use an alternative rotatable bond dependent window method instead. Default is 12&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_TORLIB ====&lt;br /&gt;
&lt;br /&gt;
Torsion library- can choose between GubaV21 or Original, default is Original.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_FF ====&lt;br /&gt;
&lt;br /&gt;
https://docs.eyesopen.com/toolkits/cpp/oefftk/OEFFConstants/OEMMFFSheffieldFFType.html#OEFF::OEMMFFSheffieldFFType::MMFF94Smod&lt;br /&gt;
&lt;br /&gt;
Default is MMFF94Smod.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_RMSD ====&lt;br /&gt;
&lt;br /&gt;
Sets rmsd for clustering and filtering conformations. If zero, omega will use an alternative rotatable-bond dependent method instead. Default is 0.5&lt;br /&gt;
&lt;br /&gt;
== Job Submission Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== SUBMIT_MODE ====&lt;br /&gt;
&lt;br /&gt;
Choose the job submission method, choose between SGE, SLURM, or TEST_LOCAL. This will be automatically set if you use the job controller&#039;s corresponding superscript, e.g submit-all-jobs-slurm.bash. TEST_LOCAL will bypass the job controller and run the first input chunk in your shell.&lt;br /&gt;
&lt;br /&gt;
==== LINES_PER_BATCH ====&lt;br /&gt;
&lt;br /&gt;
How many lines of the source .smi file should be processed per array batch job, default is 50000.&lt;br /&gt;
&lt;br /&gt;
==== LINES_PER_JOB ====&lt;br /&gt;
&lt;br /&gt;
How many lines of the batch .smi file should be processed per array task, default is 50.&lt;br /&gt;
&lt;br /&gt;
==== MAX_BATCHES ====&lt;br /&gt;
&lt;br /&gt;
Each batch job will contain LINES_PER_BATCH/LINES_PER_JOB jobs, and there will be a maximum of MAX_BATCHES batches submitted at any given time. By default this value is 25, which corresponds to 25,000 queued jobs at any given time if there are 1000 jobs per batch.&lt;br /&gt;
&lt;br /&gt;
The submit-all script will block until less than MAX_BATCHES job arrays are in the queue. TODO: block until less than MAX_BATCHES total jobs are running or in the queue.&lt;br /&gt;
&lt;br /&gt;
==== SBATCH_ARGS ====&lt;br /&gt;
&lt;br /&gt;
Additional arguments for the sbatch command. It is recommended to set a --time limit, as build jobs will save progress &amp;amp; terminate if they are still running two minutes before the --time limit.&lt;br /&gt;
&lt;br /&gt;
==== QSUB_ARGS ====&lt;br /&gt;
&lt;br /&gt;
Additional arguments for the qsub command. Similar to slurm, it is recommended to set a time limit, but you will need to manually specify both s_rt &amp;amp; h_rt. In the example, we set s_rt to be a minute and thirty seconds before h_rt. s_rt is the point where jobs will save progress and terminate, h_rt is when they will be forcibly terminated, even if they&#039;ve not finished saving.&lt;br /&gt;
&lt;br /&gt;
== Software Options ==&lt;br /&gt;
&lt;br /&gt;
All software variables will be set automatically if there exists a symbolic link in $SOFT_HOME matching the software variable&#039;s name, for example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
dock-latest -&amp;gt; DOCK.3.8.4.3d.tar.gz&lt;br /&gt;
jchem-latest -&amp;gt; jchem-19.15_r1.tar.gz&lt;br /&gt;
pyenv-latest -&amp;gt; lig_build_py3-3.7.1.tar.gz&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They may also bet set manually- value is expected to be a path to a tar.gz file.&lt;br /&gt;
&lt;br /&gt;
We use the following software:&lt;br /&gt;
&lt;br /&gt;
* DOCK_VERSION&lt;br /&gt;
&lt;br /&gt;
* JCHEM_VERSION&lt;br /&gt;
&lt;br /&gt;
* PYENV_VERSION&lt;br /&gt;
&lt;br /&gt;
* CORINA_VERSION&lt;br /&gt;
&lt;br /&gt;
* OPENBABEL_VERSION&lt;br /&gt;
&lt;br /&gt;
* EXTRALIBS_VERSION&lt;br /&gt;
  Note on EXTRALIBS- Run the pipeline with an empty EXTRALIBS package (but all other software accounted for) and see which shared libraries come up as missing in the error log. Locate all missing libraries and toss them in EXTRALIBS, they will be added to LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
* JAVA_VERSION&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
Minimal Example&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD&lt;br /&gt;
bash submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BKS Example - limit time to 2 hours, change batch size variables. Slurm tasks should automatically save progress when reaching their time limit.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD/ligand_building&lt;br /&gt;
export SBATCH_ARGS=&amp;quot;--time=02:00:00&amp;quot;&lt;br /&gt;
export LINES_PER_BATCH=20000&lt;br /&gt;
export LINES_PER_JOB=25&lt;br /&gt;
export MAX_BATCHES=15&lt;br /&gt;
bash submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wynton Example - limit time to 30 minutes, but set a soft limit 1:30 prior to the hard limit - the interrupt generated by the soft limit will signal the job to save progress for any resubmissions and exit.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD/ligand_building&lt;br /&gt;
export QSUB_ARGS=&amp;quot;-l s_rt=00:28:30 -l h_rt=00:30:00 -r y&amp;quot;&lt;br /&gt;
bash submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Resubmission =&lt;br /&gt;
&lt;br /&gt;
If your jobs for building have finished (or timed out), and you want to continue process whatever has not been processed yet, just run submit-all-jobs-slurm/sge again (with same env arguments). The submit-all script will detect which entries haven&#039;t finished and resubmit them.&lt;br /&gt;
&lt;br /&gt;
== Repatriation ==&lt;br /&gt;
&lt;br /&gt;
At BKS, we currently store the tarred output of the pipeline @ /nfs/exb/zinc22/tarballs. Currently, we use the following command to repatriate output from other clusters to our cluster:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
### migrate_output.bash&lt;br /&gt;
&lt;br /&gt;
for output in $OUTPUT_DEST/*.batch-3d.d; do&lt;br /&gt;
        echo &amp;quot;starting rsync on $output to $MIGRATE_USER@files2.docking.org&amp;quot;&lt;br /&gt;
        sshpass -f $PW_FILE rsync -arv $output/out $MIGRATE_USER@files2.docking.org:/nfs/exb/zinc22/tarballs/$(basename $output).out&lt;br /&gt;
done&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sshpass is optional here but preferable for convenience&#039;s sake. Since files2.docking.org is only visible within the UCSF network, any clusters outside will need to maintain a network tunnel when rsyncing.&lt;br /&gt;
&lt;br /&gt;
= Errors =&lt;br /&gt;
&lt;br /&gt;
Sometimes an output tarball will have few or no entries within. Certain molecule types will fail to be built, and often these molecules get bunched together (i.e if the input file is sorted by SMILES). Additionally, a small percentage of all molecules may fail to be processed by corina or amsol. If neither of these explain what is causing your missing entries, check that tarball&#039;s corresponding log entry for more info.&lt;br /&gt;
&lt;br /&gt;
= Additional Notes =&lt;br /&gt;
&lt;br /&gt;
It is safe to re-run the same file multiple times- the script takes care of making sure not to re-run any jobs that have already completed successfully prior. This is only the case if that file&#039;s corresponding batch-3d.d output directory has not been moved or deleted.&lt;br /&gt;
&lt;br /&gt;
For example, if one of your nodes went down and caused a bunch of jobs to fail, it would be safe to re-run ./submit-all-jobs.bash to re-submit those jobs. (assuming there are no jobs for that file currently queued/running)&lt;br /&gt;
&lt;br /&gt;
back to [[ZINC22:Building_3D]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ZINC22]]&lt;br /&gt;
[[Category:DOCK_3.8]]&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=Building_The_3D_Pipeline_ZINC22&amp;diff=16140</id>
		<title>Building The 3D Pipeline ZINC22</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=Building_The_3D_Pipeline_ZINC22&amp;diff=16140"/>
		<updated>2024-06-04T22:36:50Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: /* Script Arguments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The 3D pipeline is a collection of scripts and software packages that enable the massively parallel creation of dockable 3D molecules.&lt;br /&gt;
&lt;br /&gt;
= EZ Setup =&lt;br /&gt;
&lt;br /&gt;
== BKS Cluster ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
source /nfs/soft/dock/versions/dock38/pipeline_3D_ligands/env.(sh|csh)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This environment will set up most of the required variables for you, as well as adds the submission scripts to your PATH, which means submission can be as simple as:&lt;br /&gt;
&lt;br /&gt;
bash&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$HOME/myligands.smi&lt;br /&gt;
export OUTPUT_DEST=$HOME/myoutput&lt;br /&gt;
submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
csh&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
setenv INPUT_FILE $HOME/myligands.smi&lt;br /&gt;
setenv OUTPUT_DEST $HOME/myoutput&lt;br /&gt;
submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wynton Cluster ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
source /wynton/group/bks/soft/pipeline_3D_ligands/env.(sh|csh)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to the BKS example, this environment will set most of the required variables for you&lt;br /&gt;
&lt;br /&gt;
bash&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$HOME/myligands.smi&lt;br /&gt;
export OUTPUT_DEST=$HOME/myoutput&lt;br /&gt;
submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
csh&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
setenv INPUT_FILE $HOME/myligands.smi&lt;br /&gt;
setenv OUTPUT_DEST $HOME/myoutput&lt;br /&gt;
submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Repackaging Output For Docking =&lt;br /&gt;
&lt;br /&gt;
The output of the 3D pipeline scripts will be a number of tar.gz files with roughly LINES_PER_JOB molecules contained per package.&lt;br /&gt;
&lt;br /&gt;
It is standard practice to repackage these smaller packages into larger packages for docking, as 50 molecules do not take long to process with DOCK.&lt;br /&gt;
&lt;br /&gt;
See this wiki page for how to do this: [[Repackaging_DB2_DOCK38]]&lt;br /&gt;
&lt;br /&gt;
= Script Arguments =&lt;br /&gt;
&lt;br /&gt;
Main submission scripts are named submit-all-jobs-slurm.bash and submit-all-jobs-sge.bash. These scripts use environment variables as arguments instead of usual command line ones.&lt;br /&gt;
&lt;br /&gt;
E.g, on bash you would pass one of these arguments like so:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;export INPUT_FILE=$PWD/example.smi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or on csh:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;setenv INPUT_FILE $PWD/example.smi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to running the script.&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== INPUT_FILE ====&lt;br /&gt;
&lt;br /&gt;
The input .smi file to be built. This file should contain only two columns of data: (SMILES, NAME) with no header.&lt;br /&gt;
&lt;br /&gt;
==== OUTPUT_DEST ====&lt;br /&gt;
&lt;br /&gt;
The base directory for output to be stored. The script will create a sub-directory here named $INPUT_FILE.batch-3d.d&lt;br /&gt;
&lt;br /&gt;
Within this output directory there are 3 sub-directories:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; in &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; log &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In contains the input file split into fragments and sub-fragments. By default the script first splits the input file into batches of 50000, then splits those batches into sub-batches of 50. Each individual job works on one of these sub-batches. Each array batch job works on one of the batches of 50000. All of the other directories alongside &#039;in&#039; share the same directory structure.&lt;br /&gt;
&lt;br /&gt;
Log contains log messages from the jobs. If you are re-submitting a file, be aware that log messages from previous runs on this file will be overwritten.&lt;br /&gt;
&lt;br /&gt;
Out contains tar.gz output from each job. The tarballs should contain a number of 3d molecule formats for each molecule in the batch, including 1 or more db2.gz files.&lt;br /&gt;
&lt;br /&gt;
==== SOFT_HOME ====&lt;br /&gt;
&lt;br /&gt;
Where software tarballs for the pipeline are stored. Symbolic links should be maintained in this directory according to the rules described in the &amp;quot;software arguments&amp;quot; section of this page. If you&#039;re sourcing a premade environment, don&#039;t worry about setting this value.&lt;br /&gt;
&lt;br /&gt;
==== LICENSE_HOME ====&lt;br /&gt;
&lt;br /&gt;
Where software licenses are stored. Currently our licensed software includes jchem and openeye, licenses must be named .jchem-license.cxl and .oe-license.txt respectively. if you&#039;re sourcing a premade environment, don&#039;t worry about setting this value.&lt;br /&gt;
&lt;br /&gt;
== Script Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== SHRTCACHE ====&lt;br /&gt;
&lt;br /&gt;
The base working directory for the script. By default it is /scratch&lt;br /&gt;
&lt;br /&gt;
==== LONGCACHE ====&lt;br /&gt;
&lt;br /&gt;
The base directory for persistent files that are shared between jobs to go (i.e where software is installed). By default it is /scratch.&lt;br /&gt;
&lt;br /&gt;
==== CORINA_MAX_CONFS ====&lt;br /&gt;
&lt;br /&gt;
How many nitrogen flapping configurations of each protomer corina should generate. By default only one is generated.&lt;br /&gt;
&lt;br /&gt;
==== pH_LEVEL ====&lt;br /&gt;
&lt;br /&gt;
Sets what pH to generate the compound(s) at. Default is a pH of 7.4&lt;br /&gt;
&lt;br /&gt;
== Omega Arguments ==&lt;br /&gt;
&lt;br /&gt;
These parameters correspond to torsion driving parameters described in the omega manual: https://docs.eyesopen.com/applications/omega/omega/omega_opt_params.html#torsion-driving-parameters&lt;br /&gt;
&lt;br /&gt;
If you&#039;d like to know more about how these parameters function, cross reference with the manual page.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_MAX_CONFS ====&lt;br /&gt;
&lt;br /&gt;
Maximum configurations OMEGA will generate, default 600.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_ENERGY_WINDOW ====&lt;br /&gt;
&lt;br /&gt;
Torsion energy window, if set to zero OMEGA will use an alternative rotatable bond dependent window method instead. Default is 12&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_TORLIB ====&lt;br /&gt;
&lt;br /&gt;
Torsion library- can choose between GubaV21 or Original, default is Original.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_FF ====&lt;br /&gt;
&lt;br /&gt;
https://docs.eyesopen.com/toolkits/cpp/oefftk/OEFFConstants/OEMMFFSheffieldFFType.html#OEFF::OEMMFFSheffieldFFType::MMFF94Smod&lt;br /&gt;
&lt;br /&gt;
Default is MMFF94Smod.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_RMSD ====&lt;br /&gt;
&lt;br /&gt;
Sets rmsd for clustering and filtering conformations. If zero, omega will use an alternative rotatable-bond dependent method instead. Default is 0.5&lt;br /&gt;
&lt;br /&gt;
== Job Submission Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== SUBMIT_MODE ====&lt;br /&gt;
&lt;br /&gt;
Choose the job submission method, choose between SGE, SLURM, or TEST_LOCAL. This will be automatically set if you use the job controller&#039;s corresponding superscript, e.g submit-all-jobs-slurm.bash. TEST_LOCAL will bypass the job controller and run the first input chunk in your shell.&lt;br /&gt;
&lt;br /&gt;
==== LINES_PER_BATCH ====&lt;br /&gt;
&lt;br /&gt;
How many lines of the source .smi file should be processed per array batch job, default is 50000.&lt;br /&gt;
&lt;br /&gt;
==== LINES_PER_JOB ====&lt;br /&gt;
&lt;br /&gt;
How many lines of the batch .smi file should be processed per array task, default is 50.&lt;br /&gt;
&lt;br /&gt;
==== MAX_BATCHES ====&lt;br /&gt;
&lt;br /&gt;
Each batch job will contain LINES_PER_BATCH/LINES_PER_JOB jobs, and there will be a maximum of MAX_BATCHES batches submitted at any given time. By default this value is 25, which corresponds to 25,000 queued jobs at any given time if there are 1000 jobs per batch.&lt;br /&gt;
&lt;br /&gt;
The submit-all script will block until less than MAX_BATCHES job arrays are in the queue. TODO: block until less than MAX_BATCHES total jobs are running or in the queue.&lt;br /&gt;
&lt;br /&gt;
==== SBATCH_ARGS ====&lt;br /&gt;
&lt;br /&gt;
Additional arguments for the sbatch command. It is recommended to set a --time limit, as build jobs will save progress &amp;amp; terminate if they are still running two minutes before the --time limit.&lt;br /&gt;
&lt;br /&gt;
==== QSUB_ARGS ====&lt;br /&gt;
&lt;br /&gt;
Additional arguments for the qsub command. Similar to slurm, it is recommended to set a time limit, but you will need to manually specify both s_rt &amp;amp; h_rt. In the example, we set s_rt to be a minute and thirty seconds before h_rt. s_rt is the point where jobs will save progress and terminate, h_rt is when they will be forcibly terminated, even if they&#039;ve not finished saving.&lt;br /&gt;
&lt;br /&gt;
== Software Options ==&lt;br /&gt;
&lt;br /&gt;
All software variables will be set automatically if there exists a symbolic link in $SOFT_HOME matching the software variable&#039;s name, for example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
dock-latest -&amp;gt; DOCK.3.8.4.3d.tar.gz&lt;br /&gt;
jchem-latest -&amp;gt; jchem-19.15_r1.tar.gz&lt;br /&gt;
pyenv-latest -&amp;gt; lig_build_py3-3.7.1.tar.gz&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They may also bet set manually- value is expected to be a path to a tar.gz file.&lt;br /&gt;
&lt;br /&gt;
We use the following software:&lt;br /&gt;
&lt;br /&gt;
* DOCK_VERSION&lt;br /&gt;
&lt;br /&gt;
* JCHEM_VERSION&lt;br /&gt;
&lt;br /&gt;
* PYENV_VERSION&lt;br /&gt;
&lt;br /&gt;
* CORINA_VERSION&lt;br /&gt;
&lt;br /&gt;
* OPENBABEL_VERSION&lt;br /&gt;
&lt;br /&gt;
* EXTRALIBS_VERSION&lt;br /&gt;
  Note on EXTRALIBS- Run the pipeline with an empty EXTRALIBS package (but all other software accounted for) and see which shared libraries come up as missing in the error log. Locate all missing libraries and toss them in EXTRALIBS, they will be added to LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
* JAVA_VERSION&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
Minimal Example&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD&lt;br /&gt;
bash submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BKS Example - limit time to 2 hours, change batch size variables. Slurm tasks should automatically save progress when reaching their time limit.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD/ligand_building&lt;br /&gt;
export SBATCH_ARGS=&amp;quot;--time=02:00:00&amp;quot;&lt;br /&gt;
export LINES_PER_BATCH=20000&lt;br /&gt;
export LINES_PER_JOB=25&lt;br /&gt;
export MAX_BATCHES=15&lt;br /&gt;
bash submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wynton Example - limit time to 30 minutes, but set a soft limit 1:30 prior to the hard limit - the interrupt generated by the soft limit will signal the job to save progress for any resubmissions and exit.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD/ligand_building&lt;br /&gt;
export QSUB_ARGS=&amp;quot;-l s_rt=00:28:30 -l h_rt=00:30:00 -r y&amp;quot;&lt;br /&gt;
bash submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Resubmission =&lt;br /&gt;
&lt;br /&gt;
If your jobs for building have finished (or timed out), and you want to continue process whatever has not been processed yet, just run submit-all-jobs-slurm/sge again (with same env arguments). The submit-all script will detect which entries haven&#039;t finished and resubmit them.&lt;br /&gt;
&lt;br /&gt;
== Repatriation ==&lt;br /&gt;
&lt;br /&gt;
At BKS, we currently store the tarred output of the pipeline @ /nfs/exb/zinc22/tarballs. Currently, we use the following command to repatriate output from other clusters to our cluster:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
### migrate_output.bash&lt;br /&gt;
&lt;br /&gt;
for output in $OUTPUT_DEST/*.batch-3d.d; do&lt;br /&gt;
        echo &amp;quot;starting rsync on $output to $MIGRATE_USER@files2.docking.org&amp;quot;&lt;br /&gt;
        sshpass -f $PW_FILE rsync -arv $output/out $MIGRATE_USER@files2.docking.org:/nfs/exb/zinc22/tarballs/$(basename $output).out&lt;br /&gt;
done&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sshpass is optional here but preferable for convenience&#039;s sake. Since files2.docking.org is only visible within the UCSF network, any clusters outside will need to maintain a network tunnel when rsyncing.&lt;br /&gt;
&lt;br /&gt;
= Errors =&lt;br /&gt;
&lt;br /&gt;
Sometimes an output tarball will have few or no entries within. Certain molecule types will fail to be built, and often these molecules get bunched together (i.e if the input file is sorted by SMILES). Additionally, a small percentage of all molecules may fail to be processed by corina or amsol. If neither of these explain what is causing your missing entries, check that tarball&#039;s corresponding log entry for more info.&lt;br /&gt;
&lt;br /&gt;
= Additional Notes =&lt;br /&gt;
&lt;br /&gt;
It is safe to re-run the same file multiple times- the script takes care of making sure not to re-run any jobs that have already completed successfully prior. This is only the case if that file&#039;s corresponding batch-3d.d output directory has not been moved or deleted.&lt;br /&gt;
&lt;br /&gt;
For example, if one of your nodes went down and caused a bunch of jobs to fail, it would be safe to re-run ./submit-all-jobs.bash to re-submit those jobs. (assuming there are no jobs for that file currently queued/running)&lt;br /&gt;
&lt;br /&gt;
back to [[ZINC22:Building_3D]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ZINC22]]&lt;br /&gt;
[[Category:DOCK_3.8]]&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=Building_The_3D_Pipeline_ZINC22&amp;diff=16139</id>
		<title>Building The 3D Pipeline ZINC22</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=Building_The_3D_Pipeline_ZINC22&amp;diff=16139"/>
		<updated>2024-06-04T22:36:10Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: /* Script Arguments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The 3D pipeline is a collection of scripts and software packages that enable the massively parallel creation of dockable 3D molecules.&lt;br /&gt;
&lt;br /&gt;
= EZ Setup =&lt;br /&gt;
&lt;br /&gt;
== BKS Cluster ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
source /nfs/soft/dock/versions/dock38/pipeline_3D_ligands/env.(sh|csh)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This environment will set up most of the required variables for you, as well as adds the submission scripts to your PATH, which means submission can be as simple as:&lt;br /&gt;
&lt;br /&gt;
bash&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$HOME/myligands.smi&lt;br /&gt;
export OUTPUT_DEST=$HOME/myoutput&lt;br /&gt;
submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
csh&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
setenv INPUT_FILE $HOME/myligands.smi&lt;br /&gt;
setenv OUTPUT_DEST $HOME/myoutput&lt;br /&gt;
submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wynton Cluster ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
source /wynton/group/bks/soft/pipeline_3D_ligands/env.(sh|csh)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to the BKS example, this environment will set most of the required variables for you&lt;br /&gt;
&lt;br /&gt;
bash&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$HOME/myligands.smi&lt;br /&gt;
export OUTPUT_DEST=$HOME/myoutput&lt;br /&gt;
submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
csh&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
setenv INPUT_FILE $HOME/myligands.smi&lt;br /&gt;
setenv OUTPUT_DEST $HOME/myoutput&lt;br /&gt;
submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Repackaging Output For Docking =&lt;br /&gt;
&lt;br /&gt;
The output of the 3D pipeline scripts will be a number of tar.gz files with roughly LINES_PER_JOB molecules contained per package.&lt;br /&gt;
&lt;br /&gt;
It is standard practice to repackage these smaller packages into larger packages for docking, as 50 molecules do not take long to process with DOCK.&lt;br /&gt;
&lt;br /&gt;
See this wiki page for how to do this: [[Repackaging_DB2_DOCK38]]&lt;br /&gt;
&lt;br /&gt;
= Script Arguments =&lt;br /&gt;
&lt;br /&gt;
Main submission scripts are named submit-all-jobs-slurm.bash and submit-all-jobs-sge.bash. These scripts use environment variables as arguments instead of usual command line ones.&lt;br /&gt;
&lt;br /&gt;
E.g, on bash you would pass one of these arguments like so:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;export INPUT_FILE=$PWD/example.smi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or on csh:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;setenv INPUT_FILE $PWD/example.smi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to running the script.&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== INPUT_FILE ====&lt;br /&gt;
&lt;br /&gt;
The input .smi file to be built. This file should contain only two columns of data: (SMILES, NAME) with no header.&lt;br /&gt;
&lt;br /&gt;
==== OUTPUT_DEST ====&lt;br /&gt;
&lt;br /&gt;
The base directory for output to be stored. The script will create a sub-directory here named $INPUT_FILE.batch-3d.d&lt;br /&gt;
&lt;br /&gt;
Within this output directory there are 3 sub-directories:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; in &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; log &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In contains the input file split into fragments and sub-fragments. By default the script first splits the input file into batches of 50000, then splits those batches into sub-batches of 50. Each individual job works on one of these sub-batches. Each array batch job works on one of the batches of 50000. All of the other directories alongside &#039;in&#039; share the same directory structure.&lt;br /&gt;
&lt;br /&gt;
Log contains log messages from the jobs. If you are re-submitting a file, be aware that log messages from previous runs on this file will be overwritten.&lt;br /&gt;
&lt;br /&gt;
Out contains tar.gz output from each job. The tarballs should contain a number of 3d molecule formats for each molecule in the batch, including 1 or more db2.gz files.&lt;br /&gt;
&lt;br /&gt;
==== SOFT_HOME ====&lt;br /&gt;
&lt;br /&gt;
Where software tarballs for the pipeline are stored. Symbolic links should be maintained in this directory according to the rules described in the &amp;quot;software arguments&amp;quot; section of this page. If you&#039;re sourcing a premade environment, don&#039;t worry about setting this value.&lt;br /&gt;
&lt;br /&gt;
==== LICENSE_HOME ====&lt;br /&gt;
&lt;br /&gt;
Where software licenses are stored. Currently our licensed software includes jchem and openeye, licenses must be named .jchem-license.cxl and .oe-license.txt respectively. if you&#039;re sourcing a premade environment, don&#039;t worry about setting this value.&lt;br /&gt;
&lt;br /&gt;
== Script Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== SHRTCACHE ====&lt;br /&gt;
&lt;br /&gt;
The base working directory for the script. By default it is /scratch&lt;br /&gt;
&lt;br /&gt;
==== LONGCACHE ====&lt;br /&gt;
&lt;br /&gt;
The base directory for persistent files that are shared between jobs to go (i.e where software is installed). By default it is /scratch.&lt;br /&gt;
&lt;br /&gt;
==== CORINA_MAX_CONFS ====&lt;br /&gt;
&lt;br /&gt;
How many nitrogen flapping configurations of each protomer corina should generate. By default only one is generated.&lt;br /&gt;
&lt;br /&gt;
==== pH_LEVEL ====&lt;br /&gt;
&lt;br /&gt;
Sets what pH to generate the compound at. Default is 7.4&lt;br /&gt;
&lt;br /&gt;
== Omega Arguments ==&lt;br /&gt;
&lt;br /&gt;
These parameters correspond to torsion driving parameters described in the omega manual: https://docs.eyesopen.com/applications/omega/omega/omega_opt_params.html#torsion-driving-parameters&lt;br /&gt;
&lt;br /&gt;
If you&#039;d like to know more about how these parameters function, cross reference with the manual page.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_MAX_CONFS ====&lt;br /&gt;
&lt;br /&gt;
Maximum configurations OMEGA will generate, default 600.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_ENERGY_WINDOW ====&lt;br /&gt;
&lt;br /&gt;
Torsion energy window, if set to zero OMEGA will use an alternative rotatable bond dependent window method instead. Default is 12&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_TORLIB ====&lt;br /&gt;
&lt;br /&gt;
Torsion library- can choose between GubaV21 or Original, default is Original.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_FF ====&lt;br /&gt;
&lt;br /&gt;
https://docs.eyesopen.com/toolkits/cpp/oefftk/OEFFConstants/OEMMFFSheffieldFFType.html#OEFF::OEMMFFSheffieldFFType::MMFF94Smod&lt;br /&gt;
&lt;br /&gt;
Default is MMFF94Smod.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_RMSD ====&lt;br /&gt;
&lt;br /&gt;
Sets rmsd for clustering and filtering conformations. If zero, omega will use an alternative rotatable-bond dependent method instead. Default is 0.5&lt;br /&gt;
&lt;br /&gt;
== Job Submission Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== SUBMIT_MODE ====&lt;br /&gt;
&lt;br /&gt;
Choose the job submission method, choose between SGE, SLURM, or TEST_LOCAL. This will be automatically set if you use the job controller&#039;s corresponding superscript, e.g submit-all-jobs-slurm.bash. TEST_LOCAL will bypass the job controller and run the first input chunk in your shell.&lt;br /&gt;
&lt;br /&gt;
==== LINES_PER_BATCH ====&lt;br /&gt;
&lt;br /&gt;
How many lines of the source .smi file should be processed per array batch job, default is 50000.&lt;br /&gt;
&lt;br /&gt;
==== LINES_PER_JOB ====&lt;br /&gt;
&lt;br /&gt;
How many lines of the batch .smi file should be processed per array task, default is 50.&lt;br /&gt;
&lt;br /&gt;
==== MAX_BATCHES ====&lt;br /&gt;
&lt;br /&gt;
Each batch job will contain LINES_PER_BATCH/LINES_PER_JOB jobs, and there will be a maximum of MAX_BATCHES batches submitted at any given time. By default this value is 25, which corresponds to 25,000 queued jobs at any given time if there are 1000 jobs per batch.&lt;br /&gt;
&lt;br /&gt;
The submit-all script will block until less than MAX_BATCHES job arrays are in the queue. TODO: block until less than MAX_BATCHES total jobs are running or in the queue.&lt;br /&gt;
&lt;br /&gt;
==== SBATCH_ARGS ====&lt;br /&gt;
&lt;br /&gt;
Additional arguments for the sbatch command. It is recommended to set a --time limit, as build jobs will save progress &amp;amp; terminate if they are still running two minutes before the --time limit.&lt;br /&gt;
&lt;br /&gt;
==== QSUB_ARGS ====&lt;br /&gt;
&lt;br /&gt;
Additional arguments for the qsub command. Similar to slurm, it is recommended to set a time limit, but you will need to manually specify both s_rt &amp;amp; h_rt. In the example, we set s_rt to be a minute and thirty seconds before h_rt. s_rt is the point where jobs will save progress and terminate, h_rt is when they will be forcibly terminated, even if they&#039;ve not finished saving.&lt;br /&gt;
&lt;br /&gt;
== Software Options ==&lt;br /&gt;
&lt;br /&gt;
All software variables will be set automatically if there exists a symbolic link in $SOFT_HOME matching the software variable&#039;s name, for example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
dock-latest -&amp;gt; DOCK.3.8.4.3d.tar.gz&lt;br /&gt;
jchem-latest -&amp;gt; jchem-19.15_r1.tar.gz&lt;br /&gt;
pyenv-latest -&amp;gt; lig_build_py3-3.7.1.tar.gz&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They may also bet set manually- value is expected to be a path to a tar.gz file.&lt;br /&gt;
&lt;br /&gt;
We use the following software:&lt;br /&gt;
&lt;br /&gt;
* DOCK_VERSION&lt;br /&gt;
&lt;br /&gt;
* JCHEM_VERSION&lt;br /&gt;
&lt;br /&gt;
* PYENV_VERSION&lt;br /&gt;
&lt;br /&gt;
* CORINA_VERSION&lt;br /&gt;
&lt;br /&gt;
* OPENBABEL_VERSION&lt;br /&gt;
&lt;br /&gt;
* EXTRALIBS_VERSION&lt;br /&gt;
  Note on EXTRALIBS- Run the pipeline with an empty EXTRALIBS package (but all other software accounted for) and see which shared libraries come up as missing in the error log. Locate all missing libraries and toss them in EXTRALIBS, they will be added to LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
* JAVA_VERSION&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
Minimal Example&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD&lt;br /&gt;
bash submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BKS Example - limit time to 2 hours, change batch size variables. Slurm tasks should automatically save progress when reaching their time limit.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD/ligand_building&lt;br /&gt;
export SBATCH_ARGS=&amp;quot;--time=02:00:00&amp;quot;&lt;br /&gt;
export LINES_PER_BATCH=20000&lt;br /&gt;
export LINES_PER_JOB=25&lt;br /&gt;
export MAX_BATCHES=15&lt;br /&gt;
bash submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wynton Example - limit time to 30 minutes, but set a soft limit 1:30 prior to the hard limit - the interrupt generated by the soft limit will signal the job to save progress for any resubmissions and exit.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD/ligand_building&lt;br /&gt;
export QSUB_ARGS=&amp;quot;-l s_rt=00:28:30 -l h_rt=00:30:00 -r y&amp;quot;&lt;br /&gt;
bash submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Resubmission =&lt;br /&gt;
&lt;br /&gt;
If your jobs for building have finished (or timed out), and you want to continue process whatever has not been processed yet, just run submit-all-jobs-slurm/sge again (with same env arguments). The submit-all script will detect which entries haven&#039;t finished and resubmit them.&lt;br /&gt;
&lt;br /&gt;
== Repatriation ==&lt;br /&gt;
&lt;br /&gt;
At BKS, we currently store the tarred output of the pipeline @ /nfs/exb/zinc22/tarballs. Currently, we use the following command to repatriate output from other clusters to our cluster:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
### migrate_output.bash&lt;br /&gt;
&lt;br /&gt;
for output in $OUTPUT_DEST/*.batch-3d.d; do&lt;br /&gt;
        echo &amp;quot;starting rsync on $output to $MIGRATE_USER@files2.docking.org&amp;quot;&lt;br /&gt;
        sshpass -f $PW_FILE rsync -arv $output/out $MIGRATE_USER@files2.docking.org:/nfs/exb/zinc22/tarballs/$(basename $output).out&lt;br /&gt;
done&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sshpass is optional here but preferable for convenience&#039;s sake. Since files2.docking.org is only visible within the UCSF network, any clusters outside will need to maintain a network tunnel when rsyncing.&lt;br /&gt;
&lt;br /&gt;
= Errors =&lt;br /&gt;
&lt;br /&gt;
Sometimes an output tarball will have few or no entries within. Certain molecule types will fail to be built, and often these molecules get bunched together (i.e if the input file is sorted by SMILES). Additionally, a small percentage of all molecules may fail to be processed by corina or amsol. If neither of these explain what is causing your missing entries, check that tarball&#039;s corresponding log entry for more info.&lt;br /&gt;
&lt;br /&gt;
= Additional Notes =&lt;br /&gt;
&lt;br /&gt;
It is safe to re-run the same file multiple times- the script takes care of making sure not to re-run any jobs that have already completed successfully prior. This is only the case if that file&#039;s corresponding batch-3d.d output directory has not been moved or deleted.&lt;br /&gt;
&lt;br /&gt;
For example, if one of your nodes went down and caused a bunch of jobs to fail, it would be safe to re-run ./submit-all-jobs.bash to re-submit those jobs. (assuming there are no jobs for that file currently queued/running)&lt;br /&gt;
&lt;br /&gt;
back to [[ZINC22:Building_3D]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ZINC22]]&lt;br /&gt;
[[Category:DOCK_3.8]]&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
	<entry>
		<id>http://wiki.docking.org/index.php?title=Building_The_3D_Pipeline_ZINC22&amp;diff=16138</id>
		<title>Building The 3D Pipeline ZINC22</title>
		<link rel="alternate" type="text/html" href="http://wiki.docking.org/index.php?title=Building_The_3D_Pipeline_ZINC22&amp;diff=16138"/>
		<updated>2024-06-04T22:35:56Z</updated>

		<summary type="html">&lt;p&gt;Sevigneron: /* Script Arguments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The 3D pipeline is a collection of scripts and software packages that enable the massively parallel creation of dockable 3D molecules.&lt;br /&gt;
&lt;br /&gt;
= EZ Setup =&lt;br /&gt;
&lt;br /&gt;
== BKS Cluster ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
source /nfs/soft/dock/versions/dock38/pipeline_3D_ligands/env.(sh|csh)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This environment will set up most of the required variables for you, as well as adds the submission scripts to your PATH, which means submission can be as simple as:&lt;br /&gt;
&lt;br /&gt;
bash&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$HOME/myligands.smi&lt;br /&gt;
export OUTPUT_DEST=$HOME/myoutput&lt;br /&gt;
submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
csh&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
setenv INPUT_FILE $HOME/myligands.smi&lt;br /&gt;
setenv OUTPUT_DEST $HOME/myoutput&lt;br /&gt;
submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wynton Cluster ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
source /wynton/group/bks/soft/pipeline_3D_ligands/env.(sh|csh)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to the BKS example, this environment will set most of the required variables for you&lt;br /&gt;
&lt;br /&gt;
bash&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$HOME/myligands.smi&lt;br /&gt;
export OUTPUT_DEST=$HOME/myoutput&lt;br /&gt;
submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
csh&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
setenv INPUT_FILE $HOME/myligands.smi&lt;br /&gt;
setenv OUTPUT_DEST $HOME/myoutput&lt;br /&gt;
submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Repackaging Output For Docking =&lt;br /&gt;
&lt;br /&gt;
The output of the 3D pipeline scripts will be a number of tar.gz files with roughly LINES_PER_JOB molecules contained per package.&lt;br /&gt;
&lt;br /&gt;
It is standard practice to repackage these smaller packages into larger packages for docking, as 50 molecules do not take long to process with DOCK.&lt;br /&gt;
&lt;br /&gt;
See this wiki page for how to do this: [[Repackaging_DB2_DOCK38]]&lt;br /&gt;
&lt;br /&gt;
= Script Arguments =&lt;br /&gt;
&lt;br /&gt;
Main submission scripts are named submit-all-jobs-slurm.bash and submit-all-jobs-sge.bash. These scripts use environment variables as arguments instead of usual command line ones.&lt;br /&gt;
&lt;br /&gt;
E.g, on bash you would pass one of these arguments like so:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;export INPUT_FILE=$PWD/example.smi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or on csh:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;setenv INPUT_FILE $PWD/example.smi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to running the script.&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== INPUT_FILE ====&lt;br /&gt;
&lt;br /&gt;
The input .smi file to be built. This file should contain only two columns of data: (SMILES, NAME) with no header.&lt;br /&gt;
&lt;br /&gt;
==== OUTPUT_DEST ====&lt;br /&gt;
&lt;br /&gt;
The base directory for output to be stored. The script will create a sub-directory here named $INPUT_FILE.batch-3d.d&lt;br /&gt;
&lt;br /&gt;
Within this output directory there are 3 sub-directories:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; in &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; log &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In contains the input file split into fragments and sub-fragments. By default the script first splits the input file into batches of 50000, then splits those batches into sub-batches of 50. Each individual job works on one of these sub-batches. Each array batch job works on one of the batches of 50000. All of the other directories alongside &#039;in&#039; share the same directory structure.&lt;br /&gt;
&lt;br /&gt;
Log contains log messages from the jobs. If you are re-submitting a file, be aware that log messages from previous runs on this file will be overwritten.&lt;br /&gt;
&lt;br /&gt;
Out contains tar.gz output from each job. The tarballs should contain a number of 3d molecule formats for each molecule in the batch, including 1 or more db2.gz files.&lt;br /&gt;
&lt;br /&gt;
==== SOFT_HOME ====&lt;br /&gt;
&lt;br /&gt;
Where software tarballs for the pipeline are stored. Symbolic links should be maintained in this directory according to the rules described in the &amp;quot;software arguments&amp;quot; section of this page. If you&#039;re sourcing a premade environment, don&#039;t worry about setting this value.&lt;br /&gt;
&lt;br /&gt;
==== LICENSE_HOME ====&lt;br /&gt;
&lt;br /&gt;
Where software licenses are stored. Currently our licensed software includes jchem and openeye, licenses must be named .jchem-license.cxl and .oe-license.txt respectively. if you&#039;re sourcing a premade environment, don&#039;t worry about setting this value.&lt;br /&gt;
&lt;br /&gt;
== Script Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== SHRTCACHE ====&lt;br /&gt;
&lt;br /&gt;
The base working directory for the script. By default it is /scratch&lt;br /&gt;
&lt;br /&gt;
==== LONGCACHE ====&lt;br /&gt;
&lt;br /&gt;
The base directory for persistent files that are shared between jobs to go (i.e where software is installed). By default it is /scratch.&lt;br /&gt;
&lt;br /&gt;
==== CORINA_MAX_CONFS ====&lt;br /&gt;
&lt;br /&gt;
How many nitrogen flapping configurations of each protomer corina should generate. By default only one is generated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== pH_LEVEL ====&lt;br /&gt;
&lt;br /&gt;
Sets what pH to generate the compound at. Default is 7.4&lt;br /&gt;
&lt;br /&gt;
== Omega Arguments ==&lt;br /&gt;
&lt;br /&gt;
These parameters correspond to torsion driving parameters described in the omega manual: https://docs.eyesopen.com/applications/omega/omega/omega_opt_params.html#torsion-driving-parameters&lt;br /&gt;
&lt;br /&gt;
If you&#039;d like to know more about how these parameters function, cross reference with the manual page.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_MAX_CONFS ====&lt;br /&gt;
&lt;br /&gt;
Maximum configurations OMEGA will generate, default 600.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_ENERGY_WINDOW ====&lt;br /&gt;
&lt;br /&gt;
Torsion energy window, if set to zero OMEGA will use an alternative rotatable bond dependent window method instead. Default is 12&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_TORLIB ====&lt;br /&gt;
&lt;br /&gt;
Torsion library- can choose between GubaV21 or Original, default is Original.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_FF ====&lt;br /&gt;
&lt;br /&gt;
https://docs.eyesopen.com/toolkits/cpp/oefftk/OEFFConstants/OEMMFFSheffieldFFType.html#OEFF::OEMMFFSheffieldFFType::MMFF94Smod&lt;br /&gt;
&lt;br /&gt;
Default is MMFF94Smod.&lt;br /&gt;
&lt;br /&gt;
==== OMEGA_RMSD ====&lt;br /&gt;
&lt;br /&gt;
Sets rmsd for clustering and filtering conformations. If zero, omega will use an alternative rotatable-bond dependent method instead. Default is 0.5&lt;br /&gt;
&lt;br /&gt;
== Job Submission Arguments ==&lt;br /&gt;
&lt;br /&gt;
==== SUBMIT_MODE ====&lt;br /&gt;
&lt;br /&gt;
Choose the job submission method, choose between SGE, SLURM, or TEST_LOCAL. This will be automatically set if you use the job controller&#039;s corresponding superscript, e.g submit-all-jobs-slurm.bash. TEST_LOCAL will bypass the job controller and run the first input chunk in your shell.&lt;br /&gt;
&lt;br /&gt;
==== LINES_PER_BATCH ====&lt;br /&gt;
&lt;br /&gt;
How many lines of the source .smi file should be processed per array batch job, default is 50000.&lt;br /&gt;
&lt;br /&gt;
==== LINES_PER_JOB ====&lt;br /&gt;
&lt;br /&gt;
How many lines of the batch .smi file should be processed per array task, default is 50.&lt;br /&gt;
&lt;br /&gt;
==== MAX_BATCHES ====&lt;br /&gt;
&lt;br /&gt;
Each batch job will contain LINES_PER_BATCH/LINES_PER_JOB jobs, and there will be a maximum of MAX_BATCHES batches submitted at any given time. By default this value is 25, which corresponds to 25,000 queued jobs at any given time if there are 1000 jobs per batch.&lt;br /&gt;
&lt;br /&gt;
The submit-all script will block until less than MAX_BATCHES job arrays are in the queue. TODO: block until less than MAX_BATCHES total jobs are running or in the queue.&lt;br /&gt;
&lt;br /&gt;
==== SBATCH_ARGS ====&lt;br /&gt;
&lt;br /&gt;
Additional arguments for the sbatch command. It is recommended to set a --time limit, as build jobs will save progress &amp;amp; terminate if they are still running two minutes before the --time limit.&lt;br /&gt;
&lt;br /&gt;
==== QSUB_ARGS ====&lt;br /&gt;
&lt;br /&gt;
Additional arguments for the qsub command. Similar to slurm, it is recommended to set a time limit, but you will need to manually specify both s_rt &amp;amp; h_rt. In the example, we set s_rt to be a minute and thirty seconds before h_rt. s_rt is the point where jobs will save progress and terminate, h_rt is when they will be forcibly terminated, even if they&#039;ve not finished saving.&lt;br /&gt;
&lt;br /&gt;
== Software Options ==&lt;br /&gt;
&lt;br /&gt;
All software variables will be set automatically if there exists a symbolic link in $SOFT_HOME matching the software variable&#039;s name, for example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
dock-latest -&amp;gt; DOCK.3.8.4.3d.tar.gz&lt;br /&gt;
jchem-latest -&amp;gt; jchem-19.15_r1.tar.gz&lt;br /&gt;
pyenv-latest -&amp;gt; lig_build_py3-3.7.1.tar.gz&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They may also bet set manually- value is expected to be a path to a tar.gz file.&lt;br /&gt;
&lt;br /&gt;
We use the following software:&lt;br /&gt;
&lt;br /&gt;
* DOCK_VERSION&lt;br /&gt;
&lt;br /&gt;
* JCHEM_VERSION&lt;br /&gt;
&lt;br /&gt;
* PYENV_VERSION&lt;br /&gt;
&lt;br /&gt;
* CORINA_VERSION&lt;br /&gt;
&lt;br /&gt;
* OPENBABEL_VERSION&lt;br /&gt;
&lt;br /&gt;
* EXTRALIBS_VERSION&lt;br /&gt;
  Note on EXTRALIBS- Run the pipeline with an empty EXTRALIBS package (but all other software accounted for) and see which shared libraries come up as missing in the error log. Locate all missing libraries and toss them in EXTRALIBS, they will be added to LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
* JAVA_VERSION&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
Minimal Example&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD&lt;br /&gt;
bash submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BKS Example - limit time to 2 hours, change batch size variables. Slurm tasks should automatically save progress when reaching their time limit.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD/ligand_building&lt;br /&gt;
export SBATCH_ARGS=&amp;quot;--time=02:00:00&amp;quot;&lt;br /&gt;
export LINES_PER_BATCH=20000&lt;br /&gt;
export LINES_PER_JOB=25&lt;br /&gt;
export MAX_BATCHES=15&lt;br /&gt;
bash submit-all-jobs-slurm.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wynton Example - limit time to 30 minutes, but set a soft limit 1:30 prior to the hard limit - the interrupt generated by the soft limit will signal the job to save progress for any resubmissions and exit.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
export INPUT_FILE=$PWD/example.smi&lt;br /&gt;
export OUTPUT_DEST=$PWD/ligand_building&lt;br /&gt;
export QSUB_ARGS=&amp;quot;-l s_rt=00:28:30 -l h_rt=00:30:00 -r y&amp;quot;&lt;br /&gt;
bash submit-all-jobs-sge.bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Resubmission =&lt;br /&gt;
&lt;br /&gt;
If your jobs for building have finished (or timed out), and you want to continue process whatever has not been processed yet, just run submit-all-jobs-slurm/sge again (with same env arguments). The submit-all script will detect which entries haven&#039;t finished and resubmit them.&lt;br /&gt;
&lt;br /&gt;
== Repatriation ==&lt;br /&gt;
&lt;br /&gt;
At BKS, we currently store the tarred output of the pipeline @ /nfs/exb/zinc22/tarballs. Currently, we use the following command to repatriate output from other clusters to our cluster:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
### migrate_output.bash&lt;br /&gt;
&lt;br /&gt;
for output in $OUTPUT_DEST/*.batch-3d.d; do&lt;br /&gt;
        echo &amp;quot;starting rsync on $output to $MIGRATE_USER@files2.docking.org&amp;quot;&lt;br /&gt;
        sshpass -f $PW_FILE rsync -arv $output/out $MIGRATE_USER@files2.docking.org:/nfs/exb/zinc22/tarballs/$(basename $output).out&lt;br /&gt;
done&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sshpass is optional here but preferable for convenience&#039;s sake. Since files2.docking.org is only visible within the UCSF network, any clusters outside will need to maintain a network tunnel when rsyncing.&lt;br /&gt;
&lt;br /&gt;
= Errors =&lt;br /&gt;
&lt;br /&gt;
Sometimes an output tarball will have few or no entries within. Certain molecule types will fail to be built, and often these molecules get bunched together (i.e if the input file is sorted by SMILES). Additionally, a small percentage of all molecules may fail to be processed by corina or amsol. If neither of these explain what is causing your missing entries, check that tarball&#039;s corresponding log entry for more info.&lt;br /&gt;
&lt;br /&gt;
= Additional Notes =&lt;br /&gt;
&lt;br /&gt;
It is safe to re-run the same file multiple times- the script takes care of making sure not to re-run any jobs that have already completed successfully prior. This is only the case if that file&#039;s corresponding batch-3d.d output directory has not been moved or deleted.&lt;br /&gt;
&lt;br /&gt;
For example, if one of your nodes went down and caused a bunch of jobs to fail, it would be safe to re-run ./submit-all-jobs.bash to re-submit those jobs. (assuming there are no jobs for that file currently queued/running)&lt;br /&gt;
&lt;br /&gt;
back to [[ZINC22:Building_3D]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ZINC22]]&lt;br /&gt;
[[Category:DOCK_3.8]]&lt;/div&gt;</summary>
		<author><name>Sevigneron</name></author>
	</entry>
</feed>