Spaces:
Running
Running
| import pycek_public as cek | |
| import numpy as np | |
| class surface_adsorption(cek.cek_labs): | |
| def setup_lab(self): | |
| """ | |
| Define base information for the lab. | |
| They can be overwrite by the user using the kwargs in the constructor or | |
| by calling the set_parameters method. | |
| """ | |
| self.add_metadata( | |
| laboratory = 'Surface Adsorption Lab', | |
| columns = ["Dye added (mg)", "Dye in solution (mol/L)"] | |
| ) | |
| self.volume = 1 # L | |
| self.minDye = 500 # mg | |
| self.maxDye = 10000 # mg | |
| self.sample_parameters = { | |
| "dH" : -19.51e3, # J/mol | |
| "dS" : -10, # J/mol/K | |
| "Q" : 0.0001, # monolayer coverage (mol/m^2) | |
| "molarMass": 584.910641, # g/mol | |
| } | |
| self.number_of_values = 100 | |
| self.noise_level = 0.5e-5 | |
| self.precision = 10 | |
| def create_data(self): | |
| """ | |
| Generate the data | |
| """ | |
| self.set_parameters( | |
| sample = self.sample, | |
| number_of_values = self.number_of_values, | |
| ) | |
| self.add_metadata(**{ | |
| "Temperature (C)" : self.temperature - 273.15, | |
| "Volume (L)" : self.volume, | |
| "Molar mass (g/mol)" : self.sample_parameters["molarMass"], | |
| "MinDye (mg)" : self.minDye, | |
| "MaxDye (mg)" : self.maxDye, | |
| 'Number of values' : self.number_of_values, | |
| }) | |
| # Langmuir isotherm equilibrium constant | |
| # Convert to kJ/mol | |
| lnK = (-self.sample_parameters["dH"] / (self.temperature) + self.sample_parameters["dS"]) / self.R | |
| K = np.exp(lnK) # in L/mol | |
| conversion_factor = 1000 * self.sample_parameters["molarMass"] * self.volume | |
| conc_range = np.array([self.minDye, self.maxDye]) / conversion_factor | |
| self.data = self.generate_data_from_function( | |
| lambda x,K,Q: ((x*K - K*Q - 1) + np.sqrt((x*K - K*Q - 1)**2 + 4*x*K) ) / (2*K) , | |
| {"K":K , "Q":self.sample_parameters["Q"]}, | |
| self.number_of_values, | |
| xrange = conc_range, | |
| xspacing = 'linear', | |
| noise_level = self.noise_level, | |
| positive = True, | |
| ) | |
| self.data[:,0] *= conversion_factor | |
| return self.data | |