@@ -191,22 +191,22 @@ def get_standard_parameters_by_speci(speci, ghost_version):
191191 return standard_parameters [standard_parameter ]
192192
193193
194- def get_conversion_factor (initial_units , final_units , standard_parameter_speci ):
195- """ Get conversion factor to convert from initial to final units
194+ def unit_conversion (initial_units , final_units , standard_parameter_speci ):
195+ """ Use unit_converter class to return conversion object from initial to final units.
196196
197197 Parameters
198198 ----------
199- final_units : str
200- Input units
201199 initial_units : str
200+ Input units
201+ final_units : str
202202 Output units
203203 standard_parameter_speci : dict
204204 GHOST standard parameters dictionary
205205
206206 Returns
207207 -------
208- float , str
209- Conversion factor or error
208+ obj , str
209+ Conversion object or error
210210 """
211211
212212 # import unit converter
@@ -215,43 +215,43 @@ def get_conversion_factor(initial_units, final_units, standard_parameter_speci):
215215
216216 # if units are unitless, then no need for conversion (i.e. conversion factor = 1.0)
217217 if (final_units == 'unitless' ) or (final_units == '-' ) or (final_units == '1' ):
218- return 1.0
218+ return type ( 'convert_units' , ( object ,), { 'conversion_factor' : 1.0 , 'output_standard_units' : 'unitless' })
219219
220220 # determine chemical formula of species
221221 if 'chemical_formula_charge' in list (standard_parameter_speci .keys ()):
222222 speci_chemical_formula = standard_parameter_speci ['chemical_formula_charge' ]
223223 else :
224224 speci_chemical_formula = standard_parameter_speci ['chemical_formula' ]
225225
226- # get observational quantity for conversion
227- if ('units_quantity' in list (standard_parameter_speci .keys ())) and (final_units == standard_parameter_speci ['standard_units' ]):
228- final_quantity = standard_parameter_speci ['units_quantity' ]
226+ # get input (model) quantity for conversion
227+ if ('units_quantity' in list (standard_parameter_speci .keys ())) and (initial_units == standard_parameter_speci ['standard_units' ]):
228+ initial_quantity = standard_parameter_speci ['units_quantity' ]
229229 else :
230- conv_obj = unit_converter .convert_units (final_units , final_units , 1 ,
230+ conv_obj = unit_converter .convert_units (initial_units , initial_units , 1 ,
231231 species = speci_chemical_formula )
232- final_quantity = conv_obj .output_quantity
232+ initial_quantity = conv_obj .output_quantity
233233
234- # get model quantity for conversion
234+ # get output (observational) quantity for conversion
235235 if ('units_quantity' in list (standard_parameter_speci .keys ())) and (final_units == standard_parameter_speci ['standard_units' ]):
236- initial_quantity = standard_parameter_speci ['units_quantity' ]
236+ final_quantity = standard_parameter_speci ['units_quantity' ]
237237 else :
238- conv_obj = unit_converter .convert_units (initial_units , initial_units , 1 ,
238+ conv_obj = unit_converter .convert_units (final_units , final_units , 1 ,
239239 species = speci_chemical_formula )
240- initial_quantity = conv_obj .output_quantity
240+ final_quantity = conv_obj .output_quantity
241241
242242 # unit converter module does not produce conversion factor for temperature,
243- # but both observational and model units should be Kelvin (i.e. conversion factor = 1.0)
244- # if model not in K then return error
243+ # but both input and output units should be Kelvin (i.e. conversion factor = 1.0)
244+ # if input not in K then return error
245245 if final_quantity == 'temperature' :
246246 if initial_units == 'K' :
247- return 1.0
247+ return type ( 'convert_units' , ( object ,), { 'conversion_factor' : 1.0 , 'output_standard_units' : 'K' })
248248 else :
249- error = "Experiment units should be 'K', but are set as '{}'" .format (initial_units )
249+ error = "Error: Experiment units should be 'K', but are set as '{}'" .format (initial_units )
250250 return error
251251
252252 # initial and final quantities not equal (convert to observational units,
253253 # standard_temperature=293.15, standard_pressure=1013.25)
254- if final_quantity != initial_quantity :
254+ if initial_quantity != final_quantity :
255255
256256 # convert units
257257 input_units = {'temperature' : 'K' ,
@@ -266,12 +266,57 @@ def get_conversion_factor(initial_units, final_units, standard_parameter_speci):
266266 species = speci_chemical_formula ,
267267 input_quantity = initial_quantity ,
268268 output_quantity = final_quantity )
269- return conv_obj .conversion_factor
270269
271270 # same quantity conversion
272271 else :
273272 conv_obj = unit_converter .convert_units (initial_units , final_units , 1.0 ,
274273 species = speci_chemical_formula ,
275274 input_quantity = initial_quantity ,
276275 output_quantity = final_quantity )
277- return conv_obj .conversion_factor
276+
277+ # return conversion object
278+ return conv_obj
279+
280+
281+ def get_conversion_factor (initial_units , final_units , standard_parameter_speci ):
282+ """ Get conversion factor to convert from initial to final units.
283+ Convenience wrapper for unit_conversion function.
284+
285+ Parameters
286+ ----------
287+ initial_units : str
288+ Input units
289+ final_units : str
290+ Output units
291+ standard_parameter_speci : dict
292+ GHOST standard parameters dictionary
293+
294+ Returns
295+ -------
296+ float, str
297+ Conversion factor or error
298+ """
299+
300+ conv_obj = unit_conversion (initial_units , final_units , standard_parameter_speci )
301+ return conv_obj .conversion_factor
302+
303+
304+ def get_standard_units (initial_units , standard_parameter_speci ):
305+ """ Get Standarsised units for given initial units.
306+ Convenience wrapper for unit_conversion function.
307+
308+ Parameters
309+ ----------
310+ initial_units : str
311+ Input units
312+ standard_parameter_speci : dict
313+ GHOST standard parameters dictionary
314+
315+ Returns
316+ -------
317+ str
318+ Output standard units or error
319+ """
320+
321+ conv_obj = unit_conversion (initial_units , initial_units , standard_parameter_speci )
322+ return conv_obj .output_standard_units
0 commit comments