Changeset 077207b in sasview for sanscalculator


Ignore:
Timestamp:
Jan 4, 2013 7:30:31 AM (12 years ago)
Author:
Jae Cho <jhjcho@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
d7b6913
Parents:
ab7e3a4
Message:

added pdb reader

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sanscalculator/src/sans/calculator/sans_gen.py

    rab7e3a4 r077207b  
    44from sans.models.BaseComponent import BaseComponent 
    55import sans.models.sans_extension.sld2i as mod 
     6from periodictable import formula 
    67import numpy 
    78import os 
     
    5455        self.params['scale']       = 1.0 
    5556        self.params['background']  = 0.0 
    56         self.params['Up_frac_i']     = 1.0 
    57         self.params['Up_frac_f']    = 1.0 
     57        self.params['Up_frac_i']     = 0.5 
     58        self.params['Up_frac_f']    = 0.5 
    5859        self.params['Up_theta']  = 0.0 
    5960        self.description='GenSAS' 
     
    440441    ## List of allowed extensions 
    441442    ext = ['.pdb', '.PDB'] 
    442  
     443     
    443444    def read(self, path): 
    444445        """ 
     
    458459        sld_my = numpy.zeros(0) 
    459460        sld_mz = numpy.zeros(0) 
    460         pix_symbol = numpy.zeros(0)#numpy.array([]) 
     461        pix_symbol = numpy.zeros(0) 
    461462        try: 
    462463            input_f = open(path, 'rb') 
    463464            buff = input_f.read() 
    464             #buff.replace(' ', '') 
    465465            lines = buff.split('\n') 
    466466            input_f.close() 
    467467            for line in lines: 
    468468                try: 
    469                     toks = line.split() 
     469                    #toks = line.split() 
    470470                    # check if line starts with "ATOM" 
    471                     if toks[0].count('ATM') > 0 or toks[0] == 'ATOM': 
     471                    if line[0:6].strip().count('ATM') > 0 or \ 
     472                                line[0:6].strip() == 'ATOM': 
    472473                        # define fields of interest 
    473                         atom_id = toks[1] 
    474                         atom_name = toks[2] 
    475                         if line[12] == '' or len(atom_name) == 4: 
    476                             atom_name = atom_name[0].upper()  
    477                         else: 
    478                             atom_name = atom_name[0].upper() + \ 
    479                                         atom_name[1].lower() 
     474                        atom_id = line[6:11].strip() 
     475                        atom_name = line[12:16].strip() 
    480476                        try: 
    481                             float(toks[3]) 
    482                             ind = 3 
     477                            float(line[12]) 
     478                            atom_name = atom_name[1].upper() 
    483479                        except: 
    484                             ind = 4 
    485                         res_name = toks[ind] 
    486                         #chain_name = toks[3].strip() 
    487                         #residue_id = toks[4].strip() 
    488                         try: 
    489                             float(toks[4]) 
    490                         except: 
    491                             ind += 1 
    492                         ind += 1 
    493                         _pos_x = float(toks[ind]) 
    494                         ind += 1 
    495                         _pos_y = float(toks[ind]) 
    496                         ind += 1 
    497                         _pos_z = float(toks[ind]) 
     480                            if len(atom_name) == 4: 
     481                                atom_name = atom_name[0].upper() 
     482                            elif line[12] != ' ':  
     483                                atom_name = atom_name[0].upper() + \ 
     484                                        atom_name[1].lower()  
     485                            else: 
     486                                atom_name = atom_name[0].upper() 
     487                        #res_name = line[17:20].strip() 
     488                        #chain_name = line[21:22].strip() 
     489                        _pos_x = float(line[30:38].strip()) 
     490                        _pos_y = float(line[38:46].strip()) 
     491                        _pos_z = float(line[46:54].strip()) 
     492                         
    498493                        pos_x = numpy.append(pos_x, _pos_x) 
    499494                        pos_y = numpy.append(pos_y, _pos_y) 
    500495                        pos_z = numpy.append(pos_z, _pos_z) 
    501                         sld_n = numpy.append(sld_n, 7e-06) 
     496                        try: 
     497                            #from periodictable import nsf 
     498                            #val = nsf.neutron_sld(atom_name) 
     499                            val = formula(atom_name).atoms.keys()[0].neutron.b_c 
     500                            # sld in Ang unit (from fm) 
     501                            val = float(val) 
     502                            val *= 1.0e-5 
     503                            sld_n = numpy.append(sld_n, val) 
     504                        except: 
     505                            print "Error: set the sld of %s to zero"% atom_name 
     506                            sld_n = numpy.append(sld_n,  0.0)                      
    502507                        sld_mx = numpy.append(sld_mx, 0) 
    503508                        sld_my = numpy.append(sld_my, 0) 
     
    883888            self.ynodes = None 
    884889            self.znodes = None 
    885          
     890       
    886891    def set_stepsize(self): 
    887892        """ 
Note: See TracChangeset for help on using the changeset viewer.