Changeset 89108a0 in sasview
- Timestamp:
- Dec 15, 2009 12:53:15 PM (14 years ago)
- 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:
- 39e49a1
- Parents:
- 383eeaa
- Location:
- calculator
- Files:
-
- 1 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
calculator/sld_calculator.py
rcfaf6d9 r89108a0 25 25 self.length= 0.0 26 26 27 28 def setValue(self, user_formula, density, wavelength=6.0): 27 def set_value(self, user_formula, density, wavelength=6.0): 29 28 """ 30 29 Store values of density and wavelength into the calculator … … 33 32 self.wavelength = wavelength 34 33 self.density = float(density) 35 self.sld_formula = formula(str(user_formula), density= self.density) 36 print self.sld_formula.atoms 37 if self.density==0: 38 raise ZeroDivisionError,"integer division or modulo by zero for density" 34 self.sld_formula = formula(str(user_formula), density=self.density) 35 36 if self.density == 0: 37 raise ZeroDivisionError("integer division or modulo\ 38 by zero for density") 39 39 return 40 self.volume = (self.sld_formula.mass /self.density)/avogadro_number*1.0e24 40 self.volume = (self.sld_formula.mass / self.density) / avogadro_number\ 41 *1.0e24 41 42 42 43 43 def calculate XRaySld(self, element):44 def calculate_xray_sld(self, element): 44 45 """ 45 46 Get an element and compute the corresponding SLD for a given formula 46 47 @param element: elementis a string of existing atom 47 48 """ 48 myformula = formula(str 49 if len(myformula.atoms) !=1:49 myformula = formula(str(element)) 50 if len(myformula.atoms) != 1: 50 51 return 51 element = myformula.atoms.keys()[0]52 element = myformula.atoms.keys()[0] 52 53 energy = xray_energy(element.K_alpha) 53 54 atom = self.sld_formula.atoms 54 atom_reel, atom_im = xray_sld_from_atoms( 55 atom_reel, atom_im = xray_sld_from_atoms(atom, 55 56 density= self.density, 56 energy= energy 57 energy= energy) 57 58 return atom_reel, atom_im 58 59 59 60 60 def calculate NSld(self):61 def calculate_neutron_sld(self): 61 62 """ 62 63 Compute the neutron SLD for a given molecule … … 65 66 @return inc: incoherence cross section 66 67 """ 67 if self.density ==0: 68 raise ZeroDivisionError,"integer division or modulo by zero for density" 68 if self.density == 0: 69 raise ZeroDivisionError("integer division or modulo\ 70 by zero for density") 69 71 return 70 72 atom = self.sld_formula.atoms 71 coh,absorp,inc = neutron_sld_from_atoms(atom,self.density,self.wavelength) 73 coh, absorp, inc = neutron_sld_from_atoms(atom, self.density, 74 self.wavelength) 72 75 #Don't know if value is return in cm or cm^(-1).assume return in cm 73 76 # to match result of neutron inc of Alan calculator 74 self.incoherence = inc *1/1077 self.incoherence = inc * 1/10 75 78 #Doesn't match result of Alan calculator for absorption factor of 2 76 79 #multiplication of 100 is going around 77 self.absorption = absorp *2*10080 self.absorption = absorp * 2 * 100 78 81 self.coherence = coh 79 82 return self.coherence, self.absorption, self.incoherence 80 83 81 84 82 def calculate Length(self):85 def calculate_length(self): 83 86 """ 84 87 Compute the neutron 1/e length 85 88 """ 86 self.length= (self.coherence+ self.absorption+ self.incoherence)/self.volume 89 self.length = (self.coherence + self.absorption +\ 90 self.incoherence) / self.volume 87 91 return self.length 88 92 89 93 90 def calculate AbsorptionIm(self):94 def calculate_coherence_im(self): 91 95 """ 92 96 Compute imaginary part of the absorption … … 94 98 atom = self.sld_formula.atoms 95 99 #im: imaginary part of neutron SLD 96 im =0100 im = 0 97 101 for el, count in atom.iteritems(): 98 if el.neutron.b_c_i !=None: 99 im += el.neutron.b_c_i*count 100 if self.volume !=0: 102 if el.neutron.b_c_i is not None: 103 im += el.neutron.b_c_i * count 104 105 if self.volume != 0: 101 106 im = im/self.volume 102 107 else: 103 raise ZeroDivisionError,"integer division or modulo by zero for volume" 108 raise ZeroDivisionError("integer division or modulo\ 109 by zero for volume") 104 110 return im 105
Note: See TracChangeset
for help on using the changeset viewer.