DOI: 10.5061/dryad.g1jwstqx3
title: Ising model for nanocrystal ligand exchange

description: To account for inter-ligand interactions during ligand exchanges on
 colloidal quantum dots, we have developed an Ising model that uses a
 Monte-Carlo simulation where a two dimensional grid with periodic boundary
 conditions represents the nanocrystal surface. During the
 simulation, a random grid site populated with a ligand is selected along
 with a random free ligand in solution, and if the identities of those
 ligands are different, an exchange is attempted based on the Gibbs free
 energy of exchange. This process is repeated until the system
 reaches thermal equilibrium, and then the enthalpy and ligand coverage are
 calculated for a given number of starting exchange ligands. The simulation
 results are then compared to the raw experimental data, and the parameters
 are adjusted to fit isothermal titration calorimetry data and the 1H NMR
 data. This simulation was developed in Python, and the code for the
 simulation is deposited herein.
description: # Ising Model for Nanocrystal Ligand Exchange
 [https://doi.org/10.5061/dryad.g1jwstqx3](https://doi.org/10.5061/dryad.g1jwstqx3) ## Description of the data and file structure Isothermal titration calorimetry data and 1H NMR data collected for this simulation that for the reaction of zinc chloride with indium myristate capped indium phosphide quantum dots and detailed descriptions of the experimental methods can be found at DOI:10.1021/jacs.0c08954 ### Files and variables N is the total number of lattice sites in a rectangular grid with side lengths of Nx and Ny, and reflects the total number of binding sites on a single indium phosphide quantum dot. kT is Boltzmann's constant multiplied by temperature. Initial thermodynamic parameters are defined as follows. Throughout the script, the following naming conventions are used when defining variables: A terms represent values for the native ligand (indium myristate) while B terms represent values for zinc chloride. H is enthalpy, while TS is entropy. All enthalpy and entropy values are in units of kT. ·      iHA is the head binding enthalpy of indium myristate. This term is set to zero and serves as a reference value, to which the iHB is relative to. ·      iHB is the head binding enthalpy of zinc chloride. ·      iHAA is the inter-ligand enthalpy (enthalpy between ligand tail groups) between indium myristate ligands. This term is set to zero and serves as a reference value, to which iHAB and iHBB terms are relative to. ·      iHAB is the inter-ligand enthalpy between zinc chloride and indium myristate. ·      iHBB is the inter-ligand enthalpy between zinc chloride ligands. ·      iTSA is the head binding entropy of indium myristate. This term is set to zero and serves as a reference value, to which the iTSB is relative to. ·      iTSB is the head binding entropy of zinc chloride. ·      iTSAA is the inter-ligand entropy between indium myristate ligands. This term is set to zero and serves as a reference value, to which iTSAB and iTSBB terms are relative to. ·      iTSAB is the inter-ligand entropy between zinc chloride and indium myristate. ·      iTSBB is the inter-ligand entropy between zinc chloride ligands. ·      iPTH is the phase transition enthalpy. ·      iPTTS is the phase transition entropy. The variation allowed in each parameter during optimization is defined with V terms. All the initial thermodynamic parameters above have a corresponding variable named such that the i is replaced with a V (for example, the variation in the iTSBB parameter is defined as VTSBB). The variation for reference value parameters, such as VHA, are effectively set to zero. The number of free ligands and empty sites in the initial system is defined as follows: ·      IA is the initial number of indium myristates ·      IB is the initial number of zinc chlorides ·      empty_sites is the initial number of empty sites The raw experimental NMR and ITC data is included in the script as follows. ·      BNMR represents the mole ratios (moles of zinc chloride relative to moles of indium phosphide quantum dots) in the experimental NMR data. ·      ANMR represents the experimentally measured fraction of free ligand for each mole ratio in BNMR. ·      BITC2 represents the mole ratios (moles of zinc chloride relative to moles of indium phosphide quantum dots) for the experimental ITC data. In the ITC experiments, there is no data for a mole ratio of zero and it is standard practice to exclude the first injection in ITC experiments. In the script, the first data point (mole ratio of zero) and the second (mole ratio of 4) are not included in this array. ·      H represents the experimentally measured enthalpy for each mole ratio in BITC2. The raw experimental ITC and NMR data is also included in the ITCNMRData.csv data file, using the same variable names described above. This file is not necessary to execute the code. For the ITC data, the first data point in BITC2 and H is listed as n/a because this data does not exist (mole ratio of zero). For the second data point (mole ratio of 4), the H value is listed n/a because it has been excluded. BITC represents the mole ratios (moles of zinc chloride relative to moles of indium phosphide quantum dots) for the simulated ITC data. It is the same as BITC2 except that it includes the mole ratios corresponding to zero and the first injection (mole ratio of 4). Simulation parameters are defined as follows. To run a simulation, line 25 must be set to: optimize = False. ·      Nsweep is the number of exchange attempts to try ·      M is the number of times to run each number of exchange ligands Optimization parameters are defined as follows. To run an optimization, line 25 must be set to: optimize = True. ·      calls is the total number of times the simulation is attempted ·      random_calls is how many of those attempts should be random guesses All other variables are defined in the text of the code. ## Code/software This code can be run in Python, and was built in the Spyder interface out of Anacoda. Packages needed to run this code are imported in the script. It currently runs in version 4.0.1 of Spyder.