Index: src/sas/sascalc/calculator/resolution_calculator.py
===================================================================
--- src/sas/sascalc/calculator/resolution_calculator.py	(revision 9a5097cd1c76689d1f997b85ba43d12a95d8f243)
+++ src/sas/sascalc/calculator/resolution_calculator.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
@@ -15,4 +15,6 @@
 import sys
 import logging
+
+logger = logging.getLogger(__name__)
 
 #Plank's constant in cgs unit
@@ -1006,5 +1008,5 @@
             detector_offset = self.sample2detector_distance[1]
         except:
-            logging.error(sys.exc_value)
+            logger.error(sys.exc_value)
 
         # detector size in [no of pix_x,no of pix_y]
@@ -1093,5 +1095,5 @@
             output.qy_data = qy_value
         except:
-            logging.error(sys.exc_value)
+            logger.error(sys.exc_value)
 
         return output
Index: src/sas/sascalc/calculator/sas_gen.py
===================================================================
--- src/sas/sascalc/calculator/sas_gen.py	(revision 5ed76f8390eac56ff5d3779fd9c454d0c8fe1dc0)
+++ src/sas/sascalc/calculator/sas_gen.py	(revision 5ed76f8390eac56ff5d3779fd9c454d0c8fe1dc0)
@@ -12,4 +12,6 @@
 import sys
 import logging
+
+logger = logging.getLogger(__name__)
 
 MFACTOR_AM = 2.853E-12
@@ -285,5 +287,5 @@
                 mask = (x_dir2 + y_dir2 + z_dir2) <= 1.0
             except:
-                logging.error(sys.exc_value)
+                logger.error(sys.exc_value)
         self.output = MagSLD(self.pos_x[mask], self.pos_y[mask],
                              self.pos_z[mask], self.sld_n[mask],
@@ -394,5 +396,5 @@
                 except:
                     # Skip non-data lines
-                    logging.error(sys.exc_value)
+                    logger.error(sys.exc_value)
                 #Reading Header; Segment count ignored
                 s_line = line.split(":", 1)
@@ -589,5 +591,5 @@
                         z_lines.append(z_line)
                 except:
-                    logging.error(sys.exc_value)
+                    logger.error(sys.exc_value)
 
             output = MagSLD(pos_x, pos_y, pos_z, sld_n, sld_mx, sld_my, sld_mz)
@@ -683,5 +685,5 @@
                     except:
                         # Skip non-data lines
-                        logging.error(sys.exc_value)
+                        logger.error(sys.exc_value)
             output = MagSLD(pos_x, pos_y, pos_z, sld_n,
                             sld_mx, sld_my, sld_mz)
Index: src/sas/sascalc/data_util/calcthread.py
===================================================================
--- src/sas/sascalc/data_util/calcthread.py	(revision 934ce6493af6e904cf20f2500ef522b42192adfd)
+++ src/sas/sascalc/data_util/calcthread.py	(revision 64ca561b6b264f63b4d7d09a6582f1f3330ae720)
@@ -8,4 +8,5 @@
 import traceback
 import sys
+import logging
 
 if sys.platform.count("darwin") > 0:
@@ -21,4 +22,6 @@
     from time import clock
     from time import sleep
+
+logger = logging.getLogger(__name__)
 
 
@@ -243,6 +246,5 @@
             except Exception:
                 pass
-        import logging
-        logging.error(traceback.format_exc())
+        logger.error(traceback.format_exc())
         #print 'CalcThread exception',
 
Index: src/sas/sascalc/dataloader/data_info.py
===================================================================
--- src/sas/sascalc/dataloader/data_info.py	(revision 9a5097cd1c76689d1f997b85ba43d12a95d8f243)
+++ src/sas/sascalc/dataloader/data_info.py	(revision c44baf97bd848ac42af8d684f0aedf027c30eeac)
@@ -353,5 +353,6 @@
     details = None
     ## SESANS zacceptance
-    zacceptance = None
+    zacceptance = (0,"")
+    yacceptance = (0,"")
 
     def __init__(self):
Index: src/sas/sascalc/dataloader/loader.py
===================================================================
--- src/sas/sascalc/dataloader/loader.py	(revision b699768550de9d4b35b087234ec1d2a461922bab)
+++ src/sas/sascalc/dataloader/loader.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
@@ -32,4 +32,6 @@
 from readers import cansas_reader
 
+logger = logging.getLogger(__name__)
+
 class Registry(ExtensionRegistry):
     """
@@ -99,5 +101,5 @@
             msg = "DataLoader couldn't locate DataLoader plugin folder."
             msg += """ "%s" does not exist""" % dir
-            logging.warning(msg)
+            logger.warning(msg)
             return readers_found
 
@@ -117,5 +119,5 @@
                         msg = "Loader: Error importing "
                         msg += "%s\n  %s" % (item, sys.exc_value)
-                        logging.error(msg)
+                        logger.error(msg)
 
                 # Process zip files
@@ -139,10 +141,10 @@
                                 msg = "Loader: Error importing"
                                 msg += " %s\n  %s" % (mfile, sys.exc_value)
-                                logging.error(msg)
+                                logger.error(msg)
 
                     except:
                         msg = "Loader: Error importing "
                         msg += " %s\n  %s" % (item, sys.exc_value)
-                        logging.error(msg)
+                        logger.error(msg)
 
         return readers_found
@@ -190,5 +192,5 @@
                 msg = "Loader: Error accessing"
                 msg += " Reader in %s\n  %s" % (module.__name__, sys.exc_value)
-                logging.error(msg)
+                logger.error(msg)
         return reader_found
 
@@ -223,5 +225,5 @@
             msg = "Loader: Error accessing Reader "
             msg += "in %s\n  %s" % (loader.__name__, sys.exc_value)
-            logging.error(msg)
+            logger.error(msg)
         return reader_found
 
@@ -268,5 +270,5 @@
                 msg = "Loader: Error accessing Reader"
                 msg += " in %s\n  %s" % (module.__name__, sys.exc_value)
-                logging.error(msg)
+                logger.error(msg)
         return reader_found
 
Index: src/sas/sascalc/dataloader/readers/associations.py
===================================================================
--- src/sas/sascalc/dataloader/readers/associations.py	(revision e5c09cfdceff8c0c11f340ea2e16c5ebfed5a2a9)
+++ src/sas/sascalc/dataloader/readers/associations.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
@@ -18,4 +18,6 @@
 import logging
 import json
+
+logger = logging.getLogger(__name__)
 
 FILE_NAME = 'defaults.json'
@@ -67,5 +69,5 @@
                     msg = "read_associations: skipping association"
                     msg += " for %s\n  %s" % (ext.lower(), sys.exc_value)
-                    logging.error(msg)
+                    logger.error(msg)
     else:
         print "Could not find reader association settings\n  %s [%s]" % (__file__, os.getcwd())
@@ -81,5 +83,5 @@
     :param registry_function: function to be called to register each reader
     """
-    logging.info("register_readers is now obsolete: use read_associations()")
+    logger.info("register_readers is now obsolete: use read_associations()")
     import abs_reader
     import ascii_reader
Index: src/sas/sascalc/dataloader/readers/cansas_constants.py
===================================================================
--- src/sas/sascalc/dataloader/readers/cansas_constants.py	(revision ad4632c3bee7cc6b6d8987a3088e925b98cf41ab)
+++ src/sas/sascalc/dataloader/readers/cansas_constants.py	(revision 63d773c420797b9a40dbfc28b1e602df82410cae)
@@ -135,4 +135,5 @@
                              "Sesans": {"storeas": "content"},
                              "zacceptance": {"storeas": "float"},
+                             "yacceptance": {"storeas": "float"},
                              "<any>" : ANY
                             }
Index: src/sas/sascalc/dataloader/readers/cansas_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision 8434365120d0b226f06367f64c21b3bc835e1db5)
+++ src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision 63d773c420797b9a40dbfc28b1e602df82410cae)
@@ -33,4 +33,6 @@
 import xml.dom.minidom
 from xml.dom.minidom import parseString
+
+logger = logging.getLogger(__name__)
 
 PREPROCESS = "xmlpreprocess"
@@ -290,4 +292,6 @@
                 elif tagname == 'Sesans':
                     self.current_datainfo.isSesans = bool(data_point)
+                elif tagname == 'yacceptance':
+                    self.current_datainfo.sample.yacceptance = (data_point, unit)
                 elif tagname == 'zacceptance':
                     self.current_datainfo.sample.zacceptance = (data_point, unit)
@@ -1055,4 +1059,6 @@
             sesans.text = str(datainfo.isSesans)
             node.append(sesans)
+            self.write_node(node, "yacceptance", datainfo.sample.yacceptance[0],
+                             {'unit': datainfo.sample.yacceptance[1]})
             self.write_node(node, "zacceptance", datainfo.sample.zacceptance[0],
                              {'unit': datainfo.sample.zacceptance[1]})
@@ -1471,5 +1477,5 @@
                             self.errors.add(err_mess)
                             if optional:
-                                logging.info(err_mess)
+                                logger.info(err_mess)
                             else:
                                 raise ValueError, err_mess
@@ -1480,5 +1486,5 @@
                         self.errors.add(err_mess)
                         if optional:
-                            logging.info(err_mess)
+                            logger.info(err_mess)
                         else:
                             raise ValueError, err_mess
Index: src/sas/sascalc/dataloader/readers/danse_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/danse_reader.py	(revision 9a5097cd1c76689d1f997b85ba43d12a95d8f243)
+++ src/sas/sascalc/dataloader/readers/danse_reader.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
@@ -19,4 +19,6 @@
 from sas.sascalc.dataloader.data_info import Data2D, Detector
 from sas.sascalc.dataloader.manipulations import reader2D_converter
+
+logger = logging.getLogger(__name__)
 
 # Look for unit converter
@@ -142,5 +144,5 @@
                             error.append(err)
                         except:
-                            logging.info("Skipping line:%s,%s" %(data_str,
+                            logger.info("Skipping line:%s,%s" %(data_str,
                                                                 sys.exc_value))
             
@@ -196,5 +198,5 @@
                     msg = "Skipping entry (v1.0):%s,%s" % (str(data[i_pt]),
                                                            sys.exc_value)
-                    logging.info(msg)
+                    logger.info(msg)
                 
                 # Get bin number
@@ -271,5 +273,5 @@
                 raise ValueError, msg
             else:
-                logging.info("Danse_reader Reading %s \n" % filename)
+                logger.info("Danse_reader Reading %s \n" % filename)
             
             # Store loading process information
Index: src/sas/sascalc/dataloader/readers/tiff_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/tiff_reader.py	(revision 9a5097cd1c76689d1f997b85ba43d12a95d8f243)
+++ src/sas/sascalc/dataloader/readers/tiff_reader.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
@@ -16,5 +16,7 @@
 from sas.sascalc.dataloader.data_info import Data2D
 from sas.sascalc.dataloader.manipulations import reader2D_converter
-    
+
+logger = logging.getLogger(__name__)
+
 class Reader:
     """
@@ -76,5 +78,5 @@
                 value = float(val)
             except:
-                logging.error("tiff_reader: had to skip a non-float point")
+                logger.error("tiff_reader: had to skip a non-float point")
                 continue
             
Index: src/sas/sascalc/dataloader/readers/xml_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/xml_reader.py	(revision a235f71571822c52f74fd1221fcd542805cf1277)
+++ src/sas/sascalc/dataloader/readers/xml_reader.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
@@ -18,4 +18,6 @@
 from lxml import etree
 from lxml.builder import E
+
+logger = logging.getLogger(__name__)
 
 PARSER = etree.ETCompatXMLParser(remove_comments=True, remove_pis=False)
@@ -71,5 +73,5 @@
             self.xmlroot = self.xmldoc.getroot()
         except etree.XMLSyntaxError as xml_error:
-            logging.info(xml_error)
+            logger.info(xml_error)
         except Exception:
             self.xml = None
@@ -88,5 +90,5 @@
             self.xmlroot = etree.fromstring(tag_soup)
         except etree.XMLSyntaxError as xml_error:
-            logging.info(xml_error)
+            logger.info(xml_error)
         except Exception:
             self.xml = None
@@ -102,5 +104,5 @@
             self.schemadoc = etree.parse(self.schema, parser=PARSER)
         except etree.XMLSyntaxError as xml_error:
-            logging.info(xml_error)
+            logger.info(xml_error)
         except Exception:
             self.schema = None
Index: src/sas/sascalc/pr/invertor.py
===================================================================
--- src/sas/sascalc/pr/invertor.py	(revision 9a5097cd1c76689d1f997b85ba43d12a95d8f243)
+++ src/sas/sascalc/pr/invertor.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
@@ -18,4 +18,6 @@
 from scipy import optimize
 from sas.sascalc.pr.core.pr_inversion import Cinvertor
+
+logger = logging.getLogger(__name__)
 
 def help():
@@ -495,5 +497,5 @@
             # We were not able to estimate the errors
             # Return an empty error matrix
-            logging.error(sys.exc_value)
+            logger.error(sys.exc_value)
 
         # Keep a copy of the last output
@@ -541,5 +543,5 @@
             # number of terms
             best_alpha, _, _ = self.estimate_alpha(self.nfunc)
-            logging.warning("Invertor.estimate_numterms: %s" % sys.exc_value)
+            logger.warning("Invertor.estimate_numterms: %s" % sys.exc_value)
             return self.nfunc, best_alpha, "Could not estimate number of terms"
 
Index: src/sas/sascalc/pr/num_term.py
===================================================================
--- src/sas/sascalc/pr/num_term.py	(revision 9a5097cd1c76689d1f997b85ba43d12a95d8f243)
+++ src/sas/sascalc/pr/num_term.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
@@ -5,4 +5,6 @@
 import logging
 from sas.sascalc.pr.invertor import Invertor
+
+logger = logging.getLogger(__name__)
 
 class NTermEstimator(object):
@@ -180,5 +182,5 @@
                 data_err = np.append(data_err, err)
             except:
-                logging.error(sys.exc_value)
+                logger.error(sys.exc_value)
 
     return data_x, data_y, data_err
Index: src/sas/sascalc/realspace/VolumeCanvas.py
===================================================================
--- src/sas/sascalc/realspace/VolumeCanvas.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
+++ src/sas/sascalc/realspace/VolumeCanvas.py	(revision 6435594be830f5ce39be39bad902924f08910a97)
@@ -303,5 +303,5 @@
         self.shapecount += 1
 
-        #model changed, need to recalculate P(r)
+        # model changed, need to recalculate P(r)
         self._model_changed()
 
@@ -328,5 +328,5 @@
             id = "shape"+str(self.shapecount)
  
-        #shapeDesc = ShapeDescriptor(shape.lower())
+        # shapeDesc = ShapeDescriptor(shape.lower())
         if shape.lower() in shape_dict:
             shapeDesc = shape_dict[shape.lower()]()
@@ -335,5 +335,5 @@
             shapeDesc = PDBDescriptor(shape)
         else:
-            raise ValueError, "VolumeCanvas.add: Unknown shape %s" % shape
+            raise ValueError("VolumeCanvas.add: Unknown shape %s" % shape)
         
         return self.addObject(shapeDesc, id)
@@ -345,10 +345,10 @@
         """
 
-        if self.shapes.has_key(id):
+        if id in self.shapes:
             del self.shapes[id]
         else:
-            raise KeyError, "VolumeCanvas.delete: could not find shape ID"
-
-        #model changed, need to recalculate P(r)
+            raise KeyError("VolumeCanvas.delete: could not find shape ID")
+
+        # model changed, need to recalculate P(r)
         self._model_changed()
 
@@ -379,6 +379,6 @@
         # If a shape identifier was given, look the shape up
         # in the dictionary
-        if len(toks)>1:
-            if toks[0] in self.shapes.keys():
+        if len(toks):
+            if toks[0] in self.shapes:
                 # The shape was found, now look for the parameter
                 if toks[1] in self.shapes[toks[0]].params:
@@ -387,7 +387,7 @@
                     self._model_changed()
                 else:
-                    raise ValueError, "Could not find parameter %s" % name
+                    raise ValueError("Could not find parameter %s" % name)
             else:
-                raise ValueError, "Could not find shape %s" % toks[0]
+                raise ValueError("Could not find shape %s" % toks[0])
         
         else:
@@ -410,13 +410,11 @@
         if len(toks) == 1:
             try:
-                self.params.has_key(toks[0])
+                value = self.params[toks[0]]
             except KeyError:
-                raise ValueError, \
-                    "VolumeCanvas.getParam: Could not find %s" % name
-
-            value = self.params[toks[0]]
+                raise ValueError("VolumeCanvas.getParam: Could not find"
+                                 " %s" % name)
             if isinstance(value, ShapeDescriptor):
-                raise ValueError, \
-                    "VolumeCanvas.getParam: Cannot get parameter value." 
+                raise ValueError("VolumeCanvas.getParam: Cannot get parameter"
+                                 " value.")
             else:
                 return value
@@ -424,24 +422,19 @@
         elif len(toks) == 2:
             try:
-                self.shapes.has_key(toks[0])
+                shapeinstance = self.shapes[toks[0]]
             except KeyError:
-                raise ValueError, \
-                    "VolumeCanvas.getParam: Could not find %s" % name
-
-            shapeinstance = self.shapes[toks[0]]
-
-            try:
-                shapeinstance.params.has_key(toks[1])
-            except KeyError:
-                raise ValueError, \
-                    "VolumeCanvas.getParam: Could not find %s" % name
+                raise ValueError("VolumeCanvas.getParam: Could not find "
+                                 "%s" % name)
+
+            if not toks[1] in shapeinstance.params:
+                raise ValueError("VolumeCanvas.getParam: Could not find "
+                                 "%s" % name)
 
             return shapeinstance.params[toks[1]]
 
         else:
-            raise ValueError, \
-                "VolumeCanvas.getParam: Could not find %s" % name
-            
-    def getParamList(self, shapeid = None):
+            raise ValueError("VolumeCanvas.getParam: Could not find %s" % name)
+            
+    def getParamList(self, shapeid=None):
         """
 	       return a full list of all available parameters from 
@@ -455,26 +448,22 @@
 
         param_list = []
-        if shapeid == None:        
-            for key1 in self.params.keys():
+        if shapeid is None:
+            for key1 in self.params:
                 #value1 = self.params[key1]
                 param_list.append(key1)
-            for key2 in self.shapes.keys():
+            for key2 in self.shapes:
                 value2 = self.shapes[key2]
                 header = key2 + '.'
-                for key3 in value2.params.keys():   
+                for key3 in value2.params:
                     fullname = header + key3                 
                     param_list.append(fullname)
      
         else:
-            try:
-                self.shapes.has_key(shapeid)
-            except KeyError:
-                raise ValueError, \
-                    "VolumeCanvas: getParamList: Could not find %s" % shapeid
+            if not shapeid in self.shapes:
+                raise ValueError("VolumeCanvas: getParamList: Could not find "
+                                 "%s" % shapeid)
+
             header = shapeid + '.'
-            param_list = self.shapes[shapeid].params.keys()  
-            for i in range(len(param_list)):
-                param_list[i] = header + param_list[i]
-
+            param_list = [header + param for param in self.shapes[shapeid].params]
         return param_list
 
@@ -490,5 +479,5 @@
             @param shapeDesc: shape description
         """
-        #Create the object model
+        # Create the object model
         shapeDesc.create()
                     
@@ -605,5 +594,5 @@
         # type we recognize
         else:
-            raise ValueError, "run(q): bad type for q"
+            raise ValueError("run(q): bad type for q")
     
     def runXY(self, q = 0):
@@ -625,5 +614,5 @@
         # type we recognize
         else:
-            raise ValueError, "runXY(q): bad type for q"
+            raise ValueError("runXY(q): bad type for q")
     
     def _create_modelObject(self):
