You are here

select_best_unique_ligand_poses - Ligand docking

5 posts / 0 new
Last post
select_best_unique_ligand_poses - Ligand docking

Hi There,

I performed the ligand docking protocol with 250K sampling. I would like to use the 'select_best_unique_ligand_poses' application to find the unique binding modes. However, the run gets crashed with an MPI error: killed with signal 9.  I thought this is something related to the memory, so I tried using nodes with higher memory, such as 125GB and 500GB, but still, I get the same error. 

Can somebody suggest me a workaround for this?



Post Situation: 
Thu, 2018-04-19 10:36

Signal 9 is the "forcably killed" signal.  This may indeed be an out of memory issue, but there could be other reasons for it. I'd take a closer look at any diagnostic messages being printed to the log file or to your cluster system log file. There might be something else going on besides being out of memory.

I'll note that select_best_unique_ligand_poses is intrinsically a single processor application.  Running it under MPI won't gain you anything. In fact, that may be leading to memory issues, as you have multiple processes all trying to (futilely) load in the same data.

If it is a memory issue, I'd might suggest trying to add the  -jd2:delete_old_poses flag on the commandline - this may help with memory usage.

Another approach is realize that select_best_unique_ligand_poses is doing an energy-based pre-filter. You could do that manually to reduce the number of structures that the program has to work with. Filter out only the top 5% of the structures by total energy (so 12.5K of your 250K), and then set `-docking:ligand:subset_to_keep 1.0`on the commandline to tell select_best_unique_ligand_poses to skip the total energy prefilter.



Thu, 2018-04-19 11:07

Thanks for the suggestion.

I did not get any log file as I am running an interactive session. I have attached the terminal output.

I did specify the -docking:ligand:subset_to_keep 100 (to 100 poses alone), but I did not filter out beforehand. -Is there a way to retain only top 5% in the silent file?

Below is the actual command line. 

$ROSETTA3/bin/select_best_unique_ligand_poses.mpi.linuxiccrelease -in:file:silent output.silent.o -in:file:extra_res_fa lig.params -out:pdb -docking:ligand:max_poses 10 -docking:ligand:min_rms 2 -docking:ligand:subset_to_keep 100

Since the application has .mpi, I thought it would work with multiple processors. Thanks for the useful info. I will try using single processor and the -jd2:delete_old_poses flag

Thanks again and Best Regards,



File attachments: 
Thu, 2018-04-19 11:38

The mpi in the applicaiton name means that it was compiled with MPI support enabled, not that that particular program runs with MPI.

If you're going from 250K down to 100, then I would *highly* recommend using the prefilter approach. You're going to be reading in and then promptly discarding most of the structures, so it makes sense to prefilter them if you can.

You can specify only certain structures to be loaded from the with the -in:file:tags or  -in:file:tagfile option.

Assuming a binary silent file, you can use the grep command to select out the SCORE lines, then use the sort command with the -n and -k options sort those lines by the total_score column, the head command with the -n option to select just the top 100 structures, and the cut or awk commands to select the entry name. Something like the following might work (though it will depend on the exact formatting of the silent file and SCORE lines - double check each step in the pipeline to make sure it's working for you.)

       grep SCORE output.silent.o | sort -nk 2 | head -n 100 | awk '{print $NF }' > top_100.tags

You can then pass that top_100.tags file to the -in:file:tagfile option to tell Rosetta which subset of tags to select from the file.

Thu, 2018-04-19 11:55

It works now. 

Thanks a lot for the useful suggestions.

Best Regards,


Fri, 2018-04-20 12:49