Creating Own Pickle file for screened Catalysts


I am trying to run ML relaxations on specific slabs of my choice. But I dont think I have computational power ( I have mostly ChemE background ) to run ML relaxations for all the bulks in the bulks.pkl. Is there a way hopefully to extract or filter out the slabs that contains certain specific elements out, create a new pickle file and run my screening. I found that the OCP team released a new pickle file with specific catalysts for the NRR example.

For eg, if i need only Cu and Pd based bulks from the bulk file and predict the relaxed energies against adsorbates *OH , *OOH. Can I do that ?

Also ,from my understanding the ML relaxations are limited to the bulk surfaces in Bulk.pkl file. Can I create my own Bulk from ASE environment and still run ML relaxations on them?(even if they are not in the bulk.pkl file).

Thank you for the forum as I am a learning programmer this will help me sort a lot of works in my research.

  • Felix

Hi -

Sure, happy to help! If you were interested in only certain bulks, yeah you can parse through the bulks.pkl and pull out the systems of interest. Something like:

bulks = pickle.load(open("path/to/bulks.pkl", "rb"))

new_bulks = []
for bulk in bulks:
    atoms = bulk["atoms"]
    elements = set(atoms.get_chemical_symbols())
    if len(elements - set(["Cu"])) == 0 or len(elements - set(["Pd"])) == 0:

In principle yeah you can add your own bulks to that same database file in the same format and you should be able to use it out of the box. Of course depending on the complexity of that bulk it may be out of scope of the trained models, etc. but generally, yes you should be fine to explore other bulks.

Thank you so much.

But the pickle.load function returns that it might crash the Ipython Kernal. And ‘permission denied error returns’. I have attached the output here.


Hi sorry It was a mistake from my end, I created a path variable and it worked.