Package pipe_control :: Module exp_info
[hide private]
[frames] | no frames]

Source Code for Module pipe_control.exp_info

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2008-2012,2014 Edward d'Auvergne                              # 
  4  #                                                                             # 
  5  # This file is part of the program relax (http://www.nmr-relax.com).          # 
  6  #                                                                             # 
  7  # This program is free software: you can redistribute it and/or modify        # 
  8  # it under the terms of the GNU General Public License as published by        # 
  9  # the Free Software Foundation, either version 3 of the License, or           # 
 10  # (at your option) any later version.                                         # 
 11  #                                                                             # 
 12  # This program is distributed in the hope that it will be useful,             # 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of              # 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               # 
 15  # GNU General Public License for more details.                                # 
 16  #                                                                             # 
 17  # You should have received a copy of the GNU General Public License           # 
 18  # along with this program.  If not, see <http://www.gnu.org/licenses/>.       # 
 19  #                                                                             # 
 20  ############################################################################### 
 21   
 22  # Module docstring. 
 23  """Module containing functions for specifying the experimental details.""" 
 24   
 25  # relax module imports. 
 26  from data_store.exp_info import ExpInfo 
 27  from info import Info_box 
 28  from lib.errors import RelaxError 
 29  from lib.io import open_read_file 
 30  from pipe_control.pipes import check_pipe 
 31  from version import version_full 
 32   
 33   
34 -class Software_store:
35 """Software storage container.""" 36
37 - def __init__(self):
38 """Initialise all variables.""" 39 40 self.name = None 41 self.authors = None 42 self.url = None 43 self.tasks = None
44 45 46 # Software data structure. 47 SOFTWARE = {} 48 49 # relax software. 50 SOFTWARE['relax'] = Software_store() 51 SOFTWARE['relax'].name = "relax" 52 SOFTWARE['relax'].authors = "The relax development team" 53 SOFTWARE['relax'].url = "http://www.nmr-relax.com" 54 SOFTWARE['relax'].tasks = ["data processing"] 55 56 # NMRPipe software and citation. 57 SOFTWARE['NMRPipe'] = Software_store() 58 SOFTWARE['NMRPipe'].name = "NMRPipe" 59 SOFTWARE['NMRPipe'].authors = "Delaglio, F., Grzesiek, S., Vuister, G. W., Zhu, G., Pfeifer, J., and Bax, A" 60 SOFTWARE['NMRPipe'].url = "http://spin.niddk.nih.gov/NMRPipe/" 61 SOFTWARE['NMRPipe'].tasks = ["processing"] 62 63 # Sparky software and citation. 64 SOFTWARE['Sparky'] = Software_store() 65 SOFTWARE['Sparky'].name = "Sparky" 66 SOFTWARE['Sparky'].authors = "Goddard, T. D. and Kneller, D. G." 67 SOFTWARE['Sparky'].ref = "Goddard, T. D. and Kneller, D. G., SPARKY 3, University of California, San Francisco." 68 SOFTWARE['Sparky'].url = "http://www.cgl.ucsf.edu/home/sparky/" 69 SOFTWARE['Sparky'].tasks = ["spectral analysis"] 70 71 # Bruker Dynamics Center software. 72 SOFTWARE['DC'] = Software_store() 73 SOFTWARE['DC'].name = "Bruker Dynamics Center" 74 SOFTWARE['DC'].authors = "Bruker BioSpin GmbH" 75 SOFTWARE['DC'].url = "http://www.bruker-biospin.com/software_nmr.html" 76 SOFTWARE['DC'].tasks = ["relaxation analysis"] 77 78
79 -def bmrb_write_citations(star):
80 """Generate the Citations saveframe records. 81 82 @param star: The NMR-STAR dictionary object. 83 @type star: NMR_STAR instance 84 """ 85 86 # Test if the current pipe exists. 87 check_pipe() 88 89 # Loop over the citations. 90 if hasattr(cdp, 'exp_info') and hasattr(cdp.exp_info, 'citations'): 91 for citations in cdp.exp_info.citations: 92 # Rearrange the author list. 93 author_given_name = [] 94 author_family_name = [] 95 author_first_init = [] 96 author_mid_init = [] 97 author_family_title = [] 98 for i in range(len(citations.authors)): 99 author_given_name.append(citations.authors[i][0]) 100 author_family_name.append(citations.authors[i][1]) 101 author_first_init.append(citations.authors[i][2]) 102 author_mid_init.append(citations.authors[i][3]) 103 author_family_title.append(None) 104 105 # Add the citation. 106 star.citations.add(citation_label=citations.cite_id, author_given_name=author_given_name, author_family_name=author_family_name, author_first_init=author_first_init, author_mid_init=author_mid_init, author_family_title=author_family_title, doi=citations.doi, pubmed_id=citations.pubmed_id, full_citation=citations.full_citation, title=citations.title, status=citations.status, type=citations.type, journal_abbrev=citations.journal_abbrev, journal_full=citations.journal_full, volume=citations.volume, issue=citations.issue, page_first=citations.page_first, page_last=citations.page_last, year=citations.year)
107 108
109 -def bmrb_write_methods(star):
110 """Generate the Software saveframe records. 111 112 @param star: The NMR-STAR dictionary object. 113 @type star: NMR_STAR instance 114 @return: A list BMRB software IDs and a list of software labels. 115 @rtype: tuple of list of int and list of str 116 """ 117 118 # Test if the current pipe exists. 119 check_pipe() 120 121 # The scripts. 122 if hasattr(cdp, 'exp_info') and hasattr(cdp.exp_info, 'scripts'): 123 for script in cdp.exp_info.scripts: 124 # Get the citation ID numbers. 125 cite_id_nums = [] 126 if script.cite_ids: 127 for cite in script.cite_ids: 128 cite_id_nums.append(cdp.exp_info.get_cite_id_num(cite)) 129 130 # The name. 131 name = script.file + " relax script" 132 133 # The method info. 134 star.method.add(name=name, details=None, cite_ids=cite_id_nums, file_name=script.file, file_text=script.text)
135 136
137 -def bmrb_write_software(star):
138 """Generate the Software saveframe records. 139 140 @param star: The NMR-STAR dictionary object. 141 @type star: NMR_STAR instance 142 @return: A list BMRB software IDs and a list of software labels. 143 @rtype: tuple of list of int and list of str 144 """ 145 146 # Test if the current pipe exists. 147 check_pipe() 148 149 # Loop over the software. 150 software_ids = [] 151 software_labels = [] 152 if hasattr(cdp, 'exp_info') and hasattr(cdp.exp_info, 'software'): 153 for software in cdp.exp_info.software: 154 # Get the citation ID numbers. 155 cite_id_nums = [] 156 for cite in software.cite_ids: 157 cite_id_nums.append(cdp.exp_info.get_cite_id_num(cite)) 158 159 # The program info. 160 id = star.software.add(name=software.software_name, version=software.version, vendor_name=software.vendor_name, vendor_eaddress=software.url, task=software.tasks, cite_ids=cite_id_nums) 161 162 # Append the software info. 163 software_ids.append(id) 164 software_labels.append(software.software_name) 165 166 # relax cannot be the only program used! 167 else: 168 raise RelaxError("relax cannot be the only program used in the analysis - spectral analysis programs, etc. must also have been used. Please use the relevant BMRB user functions to specify these.") 169 170 # Return the software info. 171 return software_ids, software_labels
172 173
174 -def citation(cite_id=None, authors=None, doi=None, pubmed_id=None, full_citation=None, title=None, status=None, type=None, journal_abbrev=None, journal_full=None, volume=None, issue=None, page_first=None, page_last=None, year=None):
175 """Store a citation. 176 177 @keyword cite_id: The citation ID string. 178 @type cite_id: str 179 @keyword authors: The list of authors. Each author element is a list of four elements: the first name, last name, first initial, and middle initials. 180 @type authors: list of lists of str 181 @keyword doi: The DOI number, e.g. "10.1000/182". 182 @type doi: None or str 183 @keyword pubmed_id: The identification code assigned to the publication by PubMed. 184 @type pubmed_id: None or int 185 @keyword full_citation: A full citation in a format similar to that used in a journal article by either cutting and pasting from another document or by typing. Please include author names, title, journal, page numbers, and year or equivalent information for the type of publication given. 186 @type full_citation: str 187 @keyword title: The title of the publication. 188 @type title: str 189 @keyword status: The publication status. Can be one of in "preparation", "in press", "published", "retracted", or "submitted". 190 @type status: str 191 @keyword type: The publication type. Can be one of "abstract", "BMRB only", "book", "book chapter", "internet", "journal", "personal communication", or "thesis". 192 @type type: str 193 @keyword journal_abbrev: A standard journal abbreviation as defined by the Chemical Abstract Services for the journal where the data are or will be published. If the data in the deposition are related to a J. Biomol. NMR paper, the value must be 'J. Biomol. NMR' to alert the BMRB annotators so that the deposition is properly processed. If the depositor truly does not know the journal, a value of 'not known' or 'na' is acceptable. 194 @type journal_abbrev: str 195 @keyword journal_full: The full journal name. 196 @type journal_full: str 197 @keyword volume: The volume number. 198 @type volume: int 199 @keyword issue: The issue number. 200 @type issue: int 201 @keyword page_first: The first page number. 202 @type page_first: int 203 @keyword page_last: The last page number. 204 @type page_last: int 205 @keyword year: The publication year. 206 @type year: int 207 """ 208 209 # Test if the current pipe exists. 210 check_pipe() 211 212 # Set up the experimental info data container, if needed. 213 if not hasattr(cdp, 'exp_info'): 214 cdp.exp_info = ExpInfo() 215 216 # Place the data in the container. 217 cdp.exp_info.add_citation(cite_id=cite_id, authors=authors, doi=doi, pubmed_id=pubmed_id, full_citation=full_citation, title=title, status=status, type=type, journal_abbrev=journal_abbrev, journal_full=journal_full, volume=volume, issue=issue, page_first=page_first, page_last=page_last, year=year)
218 219
220 -def script(file=None, dir=None, analysis_type=None, model_selection=None, engine=None, model_elim=False, universal_solution=False):
221 """Specify the scripts used in the analysis. 222 223 @keyword file: The name of the file to open. 224 @type file: str 225 @keyword dir: The directory containing the file (defaults to the current directory if None). 226 @type dir: None or str 227 @keyword analysis_type: The type of analysis performed. 228 @type analysis_type: str 229 @keyword model_selection: The model selection technique used, if relevant. 230 @type model_selection: None or str 231 @keyword engine: The software engine used in the analysis. 232 @type engine: str 233 @keyword model_elim: A model-free specific flag specifying if model elimination was performed. 234 @type model_elim: bool 235 @keyword universal_solution: A model-free specific flag specifying if the universal solution was sought after. 236 @type universal_solution: bool 237 """ 238 239 # Test if the current pipe exists. 240 check_pipe() 241 242 # Check. 243 allowed = ['frame order', 244 'jw', 245 'mf', 246 'N-state', 247 'noe', 248 'relax_fit' 249 ] 250 if analysis_type not in allowed: 251 raise RelaxError("The analysis type '%s' should be one of %s." % (analysis_type, allowed)) 252 253 # Set up the experimental info data container, if needed. 254 if not hasattr(cdp, 'exp_info'): 255 cdp.exp_info = ExpInfo() 256 257 # Extract the text. 258 f = open_read_file(file, dir) 259 text = f.read() 260 f.close() 261 262 # Init the citation structures. 263 cite_id = [] 264 cite_key = [] 265 266 # Model selection. 267 if model_selection in ['AIC', 'AICc', 'BIC', 'Bootstrap', 'CV', 'Expect', 'Overall']: 268 cite_id.append('model-free model selection') 269 cite_key.append('dAuvergneGooley03') 270 271 # Model-free model elimination. 272 if model_elim: 273 cite_id.append('model-free model elimination') 274 cite_key.append('dAuvergneGooley06') 275 276 # Universal solution citation. 277 if universal_solution: 278 cite_id.append('model-free set theory') 279 cite_key.append('dAuvergneGooley07') 280 281 # Get the info box. 282 info = Info_box() 283 284 # Loop over all citations. 285 for id, key in zip(cite_id, cite_key): 286 # Alias the bib entry. 287 bib = info.bib[key] 288 289 # Add the citation. 290 cdp.exp_info.add_citation(cite_id=id, authors=bib.author2, doi=bib.doi, pubmed_id=bib.pubmed_id, full_citation=bib.cite_short(doi=False, url=False), title=bib.title, status=bib.status, type=bib.type, journal_abbrev=bib.journal, journal_full=bib.journal_full, volume=bib.volume, page_first=bib.page_first, page_last=bib.page_last, year=bib.year) 291 292 # Place the data in the container. 293 cdp.exp_info.setup_script(file=file, dir=dir, text=text, cite_ids=cite_id, analysis_type=analysis_type, model_selection=model_selection, engine=engine, model_elim=model_elim, universal_solution=universal_solution)
294 295
296 -def software(name=None, version=None, url=None, vendor_name=None, cite_ids=None, tasks=None):
297 """Select by name the software used in the analysis. 298 299 @param name: The name of the software program. 300 @type name: str 301 @keyword version: The program version. 302 @type version: None or str 303 @keyword url: The program's URL. 304 @type url: None or str 305 @keyword vendor_name: The name of the company or person behind the program. 306 @type vendor_name: str 307 @keyword cite_ids: The citation ID numbers. 308 @type cite_ids: None or str 309 @keyword tasks: The tasks performed by the program. 310 @type tasks: list of str 311 """ 312 313 # Test if the current pipe exists. 314 check_pipe() 315 316 # Set up the experimental info data container, if needed. 317 if not hasattr(cdp, 'exp_info'): 318 cdp.exp_info = ExpInfo() 319 320 # Place the data in the container. 321 cdp.exp_info.software_setup(name=name, version=version, url=url, vendor_name=vendor_name, cite_ids=cite_ids, tasks=tasks)
322 323
324 -def software_select(name, version=None):
325 """Select by name the software used in the analysis. 326 327 @param name: The name of the software program. 328 @type name: str 329 @keyword version: The program version. 330 @type version: None or str 331 """ 332 333 # Test if the current pipe exists. 334 check_pipe() 335 336 # Unknown program. 337 if name not in ['relax', 'NMRPipe', 'Sparky', 'Bruker DC']: 338 raise RelaxError("The software '%s' is unknown. Please use the user function for manually specifying software details instead." % name) 339 340 # Set up the experimental info data container, if needed. 341 if not hasattr(cdp, 'exp_info'): 342 cdp.exp_info = ExpInfo() 343 344 # Init. 345 cite_ids = [] 346 keys = [] 347 software_keys = [] 348 versions = [] 349 350 # relax. 351 if name == 'relax': 352 # The info. 353 cite_ids.append(['relax_ref1', 'relax_ref2']) 354 keys.append(['dAuvergneGooley08a', 'dAuvergneGooley08b']) 355 software_keys.append('relax') 356 versions.append(version_full()) 357 358 # NMRPipe. 359 elif name == 'NMRPipe': 360 # The info. 361 cite_ids.append(['nmrpipe_ref']) 362 keys.append(['Delaglio95']) 363 software_keys.append('NMRPipe') 364 versions.append(version) 365 366 # Sparky. 367 elif name == 'Sparky': 368 # Check if the version information has been supplied. 369 if not version: 370 raise RelaxError("The Sparky version number has not been supplied.") 371 372 # The info. 373 cite_ids.append(['sparky_ref']) 374 keys.append(['GoddardKneller']) 375 software_keys.append('Sparky') 376 versions.append(version) 377 378 # Bruker Dynamics Center. 379 elif name == 'Bruker DC': 380 # The info. 381 software_keys.append('DC') 382 versions.append(version) 383 384 # Get the info box. 385 info = Info_box() 386 387 # Loop over the citations. 388 for i in range(len(cite_ids)): 389 for j in range(len(cite_ids[i])): 390 # Alias the bib entry. 391 bib = info.bib[keys[i][j]] 392 393 # Add the citations. 394 cdp.exp_info.add_citation(cite_id=cite_ids[i][j], authors=bib.author2, doi=bib.doi, pubmed_id=bib.pubmed_id, full_citation=bib.cite_short(doi=False, url=False), title=bib.title, status=bib.status, type=bib.type, journal_abbrev=bib.journal, journal_full=bib.journal_full, volume=bib.volume, issue=bib.number, page_first=bib.page_first, page_last=bib.page_last, year=bib.year) 395 396 # Add the software info. 397 cdp.exp_info.software_setup(name=SOFTWARE[software_keys[i]].name, version=versions[i], vendor_name=SOFTWARE[software_keys[i]].authors, url=SOFTWARE[software_keys[i]].url, cite_ids=cite_ids, tasks=SOFTWARE[software_keys[i]].tasks)
398 399
400 -def thiol_state(state=None):
401 """Set the thiol state of the system. 402 403 @keyword state: The thiol state of the molecule. 404 @type state: str 405 """ 406 407 # Test if the current pipe exists. 408 check_pipe() 409 410 # Set up the experimental info data container, if needed. 411 if not hasattr(cdp, 'exp_info'): 412 cdp.exp_info = ExpInfo() 413 414 # Place the data in the container. 415 cdp.exp_info.setup_thiol(state=state)
416