import olx import sys sys.path.append(r".\src") import userDictionaries from olexFunctions import OlexFunctions OV = OlexFunctions() import htmlTools import olexex_setup import variableFunctions def sourceFilesHtmlMaker(): list = [ {'varName':'snum.metacif.sad_file', 'itemName':'SADABS %File%', 'chooseFile':{'filter':'.abs files|*.abs'} }, {'varName':'snum.metacif.pcf_file', 'itemName':'pcf %File%', 'chooseFile':{'filter':'.pcf files|*.pcf'} }, {'varName':'snum.metacif.p4p_file', 'itemName':'p4p %File%', 'chooseFile':{'filter':'.p4p files|*.p4p'} }, {'varName':'snum.metacif.smart_file', 'itemName':'SMART %File%', 'chooseFile':{'filter':'.ini files|*.ini'} }, {'varName':'snum.metacif.saint_file', 'itemName':'SAINT %File%', 'chooseFile':{'filter':'.ini files|*.ini'} }, {'varName':'snum.metacif.frames_file', 'itemName':'%Frame% %File%', 'chooseFile':{'filter':'All files(*.*)|*.*'} }, {'varName':'snum.metacif.integ_file', 'itemName':'%Integration% %File%', 'chooseFile':{'filter':'._ls files|*._ls'} }, {'varName':'snum.metacif.cad4_file', 'itemName':'cad4 %File%', 'chooseFile':{'filter':'.dat files|*.dat'} }, ] text = '' x = 0 for i in range(len(list)): d = list[x] listFiles = 'snum.metacif.list_%s_files' %d['varName'].split('.')[-1].split('_')[-2] var = OV.GetParam(listFiles) if var is not None: if ';' in var: d.setdefault('items', 'spy.GetParam(%s)' %listFiles) x += 1 file_type = d['varName'].split('.')[-1].split('_')[0] d.setdefault('onchange',"spy.SetParam(%s,'GetValue(SET_%s)')>>spy.AddVariableToUserInputList(%s)>>spy cif" %(d['varName'],str.upper(d['varName']).replace('.','_'),d['varName'])) d['chooseFile'].setdefault('folder',OV.FilePath()) d['chooseFile'].setdefault('file_type',file_type) d['chooseFile'].setdefault('caption',d['itemName']) else: del list[list.index(d)] text = htmlTools.makeHtmlTable(list) if text == '': retstr = 'No relevant files found' else: retstr = text return retstr OV.registerFunction(sourceFilesHtmlMaker) def diffractionMetadataHtmlMaker(): list = ( {'varName':'snum.report.diffractometer', 'readonly':'', 'itemName':'%Diffractometer%', 'items':userDictionaries.localList.getListDiffractometers(), 'onchange':"spy.addToLocalList(GetValue(SET_SNUM_REPORT_DIFFRACTOMETER),diffractometers)>>updatehtml", }, ) if OV.GetParam('snum.report.diffractometer') != '?': list += ( {'varName':'snum.report.diffractometer_definition_file', 'itemName':'%Definition File%', 'value':userDictionaries.localList.getDiffractometerDefinitionFile(OV.GetParam('snum.report.diffractometer')), 'chooseFile':{ 'caption':'Choose definition file', 'filter':'.cif files|*.cif', 'folder':'%s/etc/site' %OV.BaseDir(), 'function':'spy.setDiffractometerDefinitionFile(spy.GetParam(snum.report.diffractometer),' }, }, ) list += ( {'varName':'snum.metacif.diffrn_ambient_temperature', 'itemName':'%Diffraction Temperature% (K)' }, {'varName':'snum.metacif.cell_measurement_temperature', 'itemName':'%Cell Measurement Temperature% (K)' }, {'varName':'snum.metacif.diffrn_special_details', 'itemName':'%Special Details%', 'multiline':'multiline' } ) return htmlTools.makeHtmlTable(list) OV.registerFunction(diffractionMetadataHtmlMaker) def crystalMetadataHtmlMaker(): list = ( {'varName':'snum.metacif.chemical_name_systematic', 'itemName':'%Systematic Name%', }, {'varName':'snum.metacif.exptl_crystal_colour', 'itemName':'%Colour%', 'box1':{'varName':'snum.metacif.exptl_crystal_colour_lustre', 'items':'?;metallic;dull;clear' }, 'box2':{'varName':'snum.metacif.exptl_crystal_colour_modifier', 'items':'?;light;dark;whitish;blackish;grayish;brownish;reddish;pinkish;orangish;yellowish;greenish;bluish' }, 'box3':{'varName':'snum.metacif.exptl_crystal_colour_primary', 'items':'?;colourless;white;black;gray;brown;red;pink;orange;yellow;green;blue;violet' }, }, {'varName':'snum.metacif.exptl_crystal_size', 'itemName':'%Size%', 'box1':{'varName':'snum.metacif.exptl_crystal_size_min', 'width':'50' }, 'box2':{'varName':'snum.metacif.exptl_crystal_size_mid', 'width':'50' }, 'box3':{'varName':'snum.metacif.exptl_crystal_size_max', 'width':'50' }, }, {'varName':'snum.metacif.exptl_crystal_description', 'itemName':'%Shape%', 'items':'?;block;plate;needle;prism;irregular;cube;trapezoid;rect. Prism;rhombohedral;hexagonal;octahedral', }, {'varName':'snum.metacif.exptl_crystal_preparation', 'itemName':'%Preparation Details%', 'multiline':'multiline', }, {'varName':'snum.metacif.exptl_crystal_recrystallization_method', 'itemName':'%Crystallisation Details%', 'multiline':'multiline', }, ) return htmlTools.makeHtmlTable(list) OV.registerFunction(crystalMetadataHtmlMaker) def collectionMetadataHtmlMaker(): list = ( {'varName':'snum.report.submitter', 'itemName':'%Submitter%', 'items':userDictionaries.people.getListPeople(), 'readonly':'', 'onchange':"spy.SetParam(snum.report.submitter,GetValue(SET_SNUM_REPORT_SUBMITTER))>>spy.addNewPerson(GetValue(SET_SNUM_REPORT_SUBMITTER))>>updatehtml", }, {'varName':'snum.report.operator', 'itemName':'%Operator%', 'items':userDictionaries.people.getListPeople(), 'readonly':'', 'onchange':"spy.SetParam(snum.report.operator,GetValue(SET_SNUM_REPORT_OPERATOR))>>spy.addNewPerson(GetValue(SET_SNUM_REPORT_OPERATOR))>>updatehtml", }, {'varName':'snum.report.date_submitted', 'itemName':'%Date Submitted%', }, {'varName':'snum.report.date_collected', 'itemName':'%Date Collected%', }, ) return htmlTools.makeHtmlTable(list) OV.registerFunction(collectionMetadataHtmlMaker) def progressMetadataHtmlMaker(): list = ( {'varName':'snum.dimas.progress_status', 'itemName':'%Status%', 'items':'No Entry;Aborted;Rejected;Withdrawn;Lost;In Queue;Collecting;Reduction;Solving;Refining;Pending;Processing;Finishing;Finished;Publishing;Published;Published Duplicate;Known structure' }, {'varName':'snum.dimas.progress_comment', 'itemName':'%Comment%', 'multiline':'multiline' }, ) return htmlTools.makeHtmlTable(list) OV.registerFunction(progressMetadataHtmlMaker) def referenceMetadataHtmlMaker(): list = ( {'varName':'snum.dimas.reference_csd_refcode', 'itemName':'%CSD% %Refcode%', }, {'varName':'snum.dimas.reference_publ_authors', 'itemName':'%Authors%', }, {'varName':'snum.dimas.reference_journal_name', 'itemName':'%Journal%', 'items':userDictionaries.localList.getListJournals() }, {'varName':'snum.dimas.reference_journal_volume', 'itemName':'%Volume%', }, {'varName':'snum.dimas.reference_journal_pages', 'itemName':'%Volume%', }, {'varName':'snum.dimas.reference_journal_year', 'itemName':'%Year%', }, {'varName':'snum.dimas.reference_comment', 'itemName':'%Comment%', 'multiline':'multiline' }, ) return htmlTools.makeHtmlTable(list) OV.registerFunction(referenceMetadataHtmlMaker) def publicationMetadataHtmlMaker(): list = [ {'varName':'snum.dimas.reference_ccdc_number', 'itemName':'CCDC %Number%', }, {'varName':'snum.metacif.publ_contact_author_name', 'itemName':'%Contact% %Author%', 'items':userDictionaries.people.getListPeople(), 'readonly':'', 'onchange':'spy.SetParam(snum.metacif.publ_contact_author_name,GetValue(SET_SNUM_METACIF_PUBL_CONTACT_AUTHOR_NAME))>>spy.AddVariableToUserInputList(publ_contact_author_name)>>UpdateHtml' }, {'varName':'publ_contact_author_address', 'itemName':'%Contact% %Author% %Address%', 'multiline':'multiline', 'value':'spy.getPersonInfo(GetValue(SET_SNUM_METACIF_PUBL_CONTACT_AUTHOR_NAME),address)', 'onleave':'spy.changePersonInfo(GetValue(SET_SNUM_METACIF_PUBL_CONTACT_AUTHOR_NAME),address,GetValue(SET_PUBL_CONTACT_AUTHOR_ADDRESS))>>spy.changeBoxColour(SET_PUBL_CONTACT_AUTHOR_ADDRESS,#FFDCDC)' }, {'varName':'publ_contact_author_email', 'itemName':'%Contact% %Author% %Email%', 'value':'spy.getPersonInfo(GetValue(SET_SNUM_METACIF_PUBL_CONTACT_AUTHOR_NAME),email)', 'onleave':'spy.changePersonInfo(GetValue(SET_SNUM_METACIF_PUBL_CONTACT_AUTHOR_NAME),email,GetValue(SET_PUBL_CONTACT_AUTHOR_EMAIL))>>spy.changeBoxColour(SET_PUBL_CONTACT_AUTHOR_EMAIL,#FFDCDC)' }, {'varName':'publ_contact_author_phone', 'itemName':'%Contact% %Author% %Phone%', 'value':'spy.getPersonInfo(GetValue(SET_SNUM_METACIF_PUBL_CONTACT_AUTHOR_NAME),phone)', 'onleave':'spy.changePersonInfo(GetValue(SET_SNUM_METACIF_PUBL_CONTACT_AUTHOR_NAME),phone,GetValue(SET_PUBL_CONTACT_AUTHOR_PHONE))>>spy.changeBoxColour(SET_PUBL_CONTACT_AUTHOR_PHONE,#FFDCDC)' }, ] listAuthors = OV.GetParam('snum.metacif.publ_author_names') if listAuthors is None: numberAuthors = 0 else: numberAuthors = len(listAuthors.split(';')) for i in range(1,numberAuthors+1): authorRow = { 'varName':'snum.metacif.publ_author_names', 'ctrl_name':'SET_SNUM_METACIF_PUBL_AUTHOR_NAMES_%s' %i, 'readonly':'readonly', 'value':"%s" %listAuthors.split(';')[i-1], 'bgcolor':"%s" %OV.GetParam('gui.html.table_bg_colour'), 'onchange':"" } if numberAuthors == 1: authorRow.setdefault('itemName','') authorRow.setdefault('field1',{'itemName':'%Author%'}) authorRow.setdefault('field2',{'itemName':'' %str(i), 'fieldALIGN':'right'}) elif i == 1: authorRow.setdefault('itemName','') authorRow.setdefault('field1',{'itemName':'%Authors%'}) authorRow.setdefault('field2',{'itemName':' ' %(str(i),str(i)), 'fieldALIGN':'right'}) elif i == numberAuthors: authorRow.setdefault('itemName','' %(str(i),str(i))) authorRow.setdefault('fieldALIGN','right') authorRow['bgcolor'] = OV.GetParam('gui.html.input_bg_colour') else: authorRow.setdefault('itemName',' ' %(str(i),str(i),str(i))) authorRow.setdefault('fieldALIGN','right') list.append(authorRow) if numberAuthors > 0: s = '_' + str(numberAuthors) list.append( {'varName':'publ_author_address', 'itemName':'%Author% %Address%', 'multiline':'multiline', 'value':'spy.getPersonInfo(GetValue(SET_SNUM_METACIF_PUBL_AUTHOR_NAMES%s),address)' %s, 'onleave':'spy.changePersonInfo(GetValue(SET_SNUM_METACIF_PUBL_AUTHOR_NAMES%s),address,GetValue(SET_PUBL_AUTHOR_ADDRESS))>>spy.changeBoxColour(SET_PUBL_AUTHOR_ADDRESS,#FFDCDC)' %s } ) list.append( {'varName':'publ_author_email', 'itemName':'%Author% %Email%', 'value':'spy.getPersonInfo(GetValue(SET_SNUM_METACIF_PUBL_AUTHOR_NAMES%s),email)' %s, 'onleave':'spy.changePersonInfo(GetValue(SET_SNUM_METACIF_PUBL_AUTHOR_NAMES%s),email,GetValue(SET_PUBL_AUTHOR_EMAIL))>>spy.changeBoxColour(SET_PUBL_AUTHOR_EMAIL,#FFDCDC)' %s } ) list.append( {'varName':'snum.metacif.publ_author_names', 'ctrl_name':'ADD_PUBL_AUTHOR_NAME', 'readonly':'', 'itemName':'%Add% %Author%', 'items':userDictionaries.people.getListPeople(), 'value':'?', 'onchange':"spy.AddNameToAuthorList(GetValue(ADD_PUBL_AUTHOR_NAME))>>updatehtml", 'onleave':"spy.AddNameToAuthorList(GetValue(ADD_PUBL_AUTHOR_NAME))>>updatehtml", } ) for d in list: d.setdefault('ctrl_name','SET_%s' %str.upper(d['varName']).replace('.','_')) if 'ctrl_name' in d['varName']: d.setdefault('onchange',"spy.SetParam(%(varName)s,GetValue(%(ctrl_name)s))>>spy.changeBoxColour(%(ctrl_name)s,#FFDCDC)>>updatehtml" %d) elif 'author_name' in d['varName']: d.setdefault('onchange','') elif 'author' in d['varName']: d.setdefault('onleave','') retstr = htmlTools.makeHtmlTable(list) list = [ {'varName':'snum.metacif.publ_requested_journal', 'itemName':'%Requested% %Journal%', 'items':userDictionaries.localList.getListJournals(), 'readonly':'', 'onchange':'spy.addToLocalList(GetValue(SET_SNUM_METACIF_PUBL_REQUESTED_JOURNAL),requested_journal)>>spy.changeBoxColour(SET_SNUM_METACIF_PUBL_REQUESTED_JOURNAL,#FFDCDC)', } ] retstr += htmlTools.makeHtmlTable(list) retstr += """ Contact Letter """ return retstr OV.registerFunction(publicationMetadataHtmlMaker) def contactLetter(): user_input_variables = OV.GetParam('snum.metacif.user_input_variables') if user_input_variables is None or 'publ_contact_letter' not in user_input_variables: import datetime today = datetime.date.today() date = today.strftime("%x") journal = OV.GetParam('snum.metacif.publ_requested_journal') fileName = olx.FileName() authorList = OV.GetParam('snum.metacif.publ_author_names') authors = '' if authorList is None: numberAuthors = 0 else: authorList = authorList.split(';') numberAuthors = len(authorList) for i in range(numberAuthors): author = authorList[i] if ',' in author: a = author.split(',') surname = a[0] initials = '' for forename in a[1].split(): initials += '%s.' %forename[0].upper() else: a = author.split() surname = a[-1] initials = '' for forename in a[:-1]: initials += '%s.' %forename[0].upper() if i < numberAuthors - 2: authorAbbrev = initials + surname + ', ' elif i == numberAuthors - 2: authorAbbrev = initials + surname + ' and ' elif i > numberAuthors - 2: authorAbbrev = initials + surname authors += authorAbbrev letterText = """Date of submission %s The CIF file contains data for the structure %s from the paper 'ENTER PAPER TITLE' by %s. The paper will be submitted to %s. """ %(date,fileName,authors,journal) else: letterText = OV.GetParam('snum.metacif.publ_contact_letter') inputText = OV.GetUserInput(0,'_publ_contact_letter',letterText) if inputText == '': OV.SetParam('snum.metacif.publ_contact_letter', letterText) elif inputText != letterText: OV.SetParam('snum.metacif.publ_contact_letter', inputText) variableFunctions.AddVariableToUserInputList('publ_contact_letter') elif 'publ_contact_letter' not in OV.GetParam('snum.metacif.user_input_variables'): OV.SetParam('snum.metacif.publ_contact_letter', letterText) else: pass return "" OV.registerFunction(contactLetter) def AddNameToAuthorList(newName): oldValue = OV.GetParam("snum.metacif.publ_author_names") if newName != '?': if oldValue is None: newValue = newName elif newName in oldValue: newValue = oldValue print "%s is already in the list of authors" %newName else: newValue = oldValue + ";" + newName OV.SetParam("snum.metacif.publ_author_names", newValue) return "" OV.registerFunction(AddNameToAuthorList) def move(arg,name): listNames = OV.GetParam('snum.metacif.publ_author_names').split(';') name_i = olx.GetValue(name) i = listNames.index(name_i) if arg.lower() == 'up': if i != 0: name_i_minus_1 = listNames[i-1] listNames[i] = name_i_minus_1 listNames[i-1] = name_i else: pass elif arg.lower() == 'down': try: name_i_plus_1 = listNames[i+1] listNames[i] = name_i_plus_1 listNames[i+1] = name_i except: pass elif arg in ('del','DEL'): del listNames[i] names = ';'.join(listNames) OV.SetParam('snum.metacif.publ_author_names', names) return '' OV.registerFunction(move) def restraint_builder(cmd): colspan = 6 constraints = ["EXYZ", "EADP", "AFIX"] olex_conres = ["RRINGS", "TRIA"] html = "" atom_pairs = { "DFIX":["name_DFIX", "var_d: ", "var_s:0.02", "help_DFIX-use-help"], "DANG":["name_DANG", "var_d: ", "var_s:0.04", "help_Select atom pairs"], "SADI":["name_SADI", "var_s:0.02", "help_SADI-use-help"], } atom_names = { "SAME":["name_SAME", "var_s1:0.02", "var_s2:0.02", "help_Select any number of atoms"], "CHIV":["name_CHIV", "var_V:0", "var_s:0.1", "help_Select any number of atoms"], "FLAT":["name_FLAT", "var_s1:0.1", "help_Select at least four atoms"], "DELU":["name_DELU", "var_s1:0.01", "var_s2:0.01", "help_Select any number of atoms"], "SIMU":["name_SIMU", "var_s:0.04", "var_st:0.08", "var_dmax:1.7", "help_Select any number of atoms"], "ISOR":["name_ISOR", "var_s:0.1", "var_st:0.2", "help_Select any number of atoms"], "EXYZ":["name_EXYZ", "help_exyz-htmhelp"], "EADP":["name_EADP", "help_eadp-htmhelp"], "AFIX":["name_AFIX", "var_m:6;5;10;11", "var_n:6;9", "help_AFIX-use-help"], "RRINGS":["name_RRINGS", "var_d: ", "var_s1:0.02", "help_rrings-htmhelp"], "TRIA":["name_TRIA", "var_distance: ", "var_angle: ", "help_tria-htmhelp"], } if atom_pairs.has_key(cmd): l = atom_pairs[cmd] elif atom_names.has_key(cmd): l = atom_names[cmd] else: return "Please atoms and restraint, then press GO" onclick = "" pre_onclick = "" post_onclick = "" html_help = "Click on the help link for more info" itemcount = 0 items = None var = None for item in l: itemcount += 1 id = item.split("_")[0] tem = item.split("_")[1] if ":" in tem: var = tem.split(":")[0] val = tem.split(":")[1] if id == "name": name = tem onclick += "%s " %name #html += "%s" %tem elif id == "help": html_help = OV.TranslatePhrase(tem) html_help, d = htmlTools.format_help(html_help) elif id == "var": ctrl_name = "%s_%s_TEXT_BOX" %(name, var) pre_onclick += "SetVar(%s_value,GetValue(%s))>>" %(ctrl_name,ctrl_name) onclick += "GetValue(%s) " %ctrl_name if val == " ": val = "$GetVar(%s_value,'')" %ctrl_name elif ';' in val: items = val val = items.split(';')[0] else: items = None val = val.strip() if items: width = 40 else: width=50 if var == "d": width=50 d = {"ctrl_name":ctrl_name, "label":var, "value":val, "width":width, "height":17, "bgcolor":"$spy.GetParam(gui.html.input_bg_colour)" } if items: d.setdefault("items",items) #html += "%s" %make_input_text_box(d) if var: html += "%s" %htmlTools.makeHtmlInputBox(d) if name == "AFIX": itemcount += 2 onclick_list = onclick.strip().split(' ') onclick = 'AFIX strcat(%s,%s)' %(onclick_list[1],onclick_list[2]) post_onclick = '>>labels -a' mode_ondown = "mode %s" %(onclick.replace('AFIX ','HFIX ')) mode_onup = "mode off>>sel -u" mode_button_d = { "name":'AFIX_MODE', "value":"Mode", "ondown":"%s"%mode_ondown, "onup":"%s"%mode_onup, "width":40, "height":28, "hint":"Atoms subsequently clicked will become the pivot atom of a new rigid group", } clear_onclick = "sel atoms where xatom.afix == strcat(%s,%s)>>Afix 0>>labels -a" %(onclick_list[1],onclick_list[2]) clear_button_d = { "name":'AFIX_CLEAR', "value":"Clear", "onclick":"%s"%clear_onclick, "width":40, "height":28, "hint":"Removes the current AFIX command from the structure", } has_modes = [] if name in has_modes: if haveSelection(): onclick += " sel" else: onclick = "mode %s" %onclick else: onclick += " sel" onclick = "%s%s%s" %(pre_onclick, onclick, post_onclick) button_d = { "name":'%s_GO' %name, "value":"GO", "onclick":"%s"%onclick, "width":30, "height":28, "hint":"The %s command will be applied to all currently selected atoms" %name } if itemcount < colspan: html+= ""*(colspan-itemcount) # Space-filler if name == 'AFIX': html += "%s" %htmlTools.make_input_button(clear_button_d) html += "%s" %htmlTools.make_input_button(mode_button_d) html += "%s" %htmlTools.make_input_button(button_d) #Add the help info as the last row in the table html += "" html += htmlTools.make_table_first_col(help_name=name, popout=True, help_image='normal') html += "%s" %(colspan, OV.GetParam('gui.html.table_firstcol_colour'), html_help, ) if name in constraints: wFilePath = r"constraint-vars.htm" elif name in olex_conres: wFilePath = r"olex-conres-vars.htm" else: wFilePath = r"restraint-vars.htm" OV.write_to_olex(wFilePath, html) OV.UpdateHtml() return "Done" OV.registerFunction(restraint_builder) have_found_python_error = False def checkErrLogFile(): logfile = "%s/PythonError.log" %OV.DataDir() logfile = logfile.replace("\\\\", "\\") global have_found_python_error if not have_found_python_error: f = open(logfile, 'r') if len(f.readlines()) > 0: have_found_python_error = True f.close() if have_found_python_error: return ''' '''%(logfile) else: return "" OV.registerFunction(checkErrLogFile) def weightGuiDisplay(): if "smtbx" in OV.GetParam('snum.refinement.program'): return "" gui_green = OV.FindValue('gui_green') gui_orange = OV.FindValue('gui_orange') gui_red = OV.FindValue('gui_red') longest = 0 retVal = "" current_weight = olx.Ins('weight').split() if len(current_weight) == 1: current_weight = [current_weight[0], '0'] length_current = len(current_weight) suggested_weight = olx.Ins('weight1').split() if len(suggested_weight) < length_current: for i in xrange (length_current - len(suggested_weight)): suggested_weight.append('0') if suggested_weight: for curr, sugg in zip(current_weight, suggested_weight): c = curr.replace(".", "") if len(c) > longest: longest = len(c) s = sugg.replace(".", "") if len(s) > longest: longest = len(s) for curr, sugg in zip(current_weight, suggested_weight): if "." in curr: while len(curr) < longest and curr != "0": curr += '0' if "." in sugg: while len(sugg) < longest and sugg != "0": sugg += '0' if curr == sugg: colour = gui_green elif float(curr)-float(curr)*0.1 < float(sugg) < float(curr)+float(curr)*0.1: colour = gui_orange else: colour = gui_red retVal += "%s(%s) | " %(colour, curr, sugg) html_scheme = retVal.strip("| ") else: html_scheme = current_weight d = {'ctrl_name':'SET_SNUM_REFINEMENT_UPDATE_WEIGHT', 'checked':'$spy.GetParam(snum.refinement.update_weight)', 'oncheck':'spy.SetParam(snum.refinement.update_weight,true)', 'onuncheck':'spy.SetParam(snum.refinement.update_weight,false)', 'value':'', } box = htmlTools.make_tick_box_input(d) txt_tick_the_box = OV.TranslatePhrase("Tick the box to automatically update") txt_Weight = OV.TranslatePhrase("Weight") html = ''' %s: %s %s ''' %(txt_tick_the_box, txt_Weight, html_scheme, box) return html OV.registerFunction(weightGuiDisplay) def getCellHTML(): crystal_systems = { 'Triclinic':('a', 'b', 'c', 'α', 'β', 'γ'), 'Monoclinic':('a', 'b', 'c', 'β'), 'Orthorhombic':('a', 'b', 'c'), 'Tetragonal':('a', 'c',), 'Hexagonal':('a', 'c'), 'Trigonal':('a', 'c'), 'Cubic':('a',), } cell_param_value_pairs = dict(zip( ('a', 'b', 'c', 'α', 'β', 'γ'), ('_cell_length_a','_cell_length_b','_cell_length_c','_cell_angle_alpha','_cell_angle_beta','_cell_angle_gamma'))) cell = {} for param, value in cell_param_value_pairs.items(): if param in ('a','b','c'): cell[param] = dict( value = '%%%s%%' %value, unit = ' Å' ) else: cell[param] = dict( value = '%%%s%%' %value, unit = '°' ) cell_html = dict((param, '%s = %s%s, ' %(param,cell[param]['value'],cell[param]['unit'])) for param in cell.keys()) crystal_system = OV.olex_function('sg(%s)') html = ''.join(cell_html[param] for param in crystal_systems[crystal_system]) return html OV.registerFunction(getCellHTML)