diff --git a/navipy/database/__init__.py b/navipy/database/__init__.py
index bef05641d49792b26df16014a7cf02f0e7b5df79..e111ad5f7956a0fa12261cc551f262ca3e40890a 100644
--- a/navipy/database/__init__.py
+++ b/navipy/database/__init__.py
@@ -91,7 +91,7 @@ def adapt_array(arr):
     """
     http://stackoverflow.com/a/31312102/190597 (SoulNibbler)
     """
-    if array is None:
+    if arr is None:
         raise ValueError('array must not be None')
     out = io.BytesIO()
     np.save(out, arr)
@@ -123,11 +123,13 @@ It creates three sql table on initialisation.
         """Initialisation of the database """
         if not isinstance(filename, str):
             raise TypeError('filename should be a string')
-        if (not isinstance(channels, list) or not isinstance(channels,np.array)):
+        if (not isinstance(channels, list) or
+           not isinstance(channels, np.array)):
             raise TypeError('nb_channel should be a list or np array')
         """for c in channels:
             if not c in ['R','G','B','D']:
-                raise ValueError('channels must be either R,G,B or D (Distance)')"""
+                raise ValueError('channels
+                                 must be either R,G,B or D (Distance)')"""
         self.filename = filename
         self.channels = channels
         self.normalisation_columns = list()
@@ -159,8 +161,8 @@ It creates three sql table on initialisation.
             self.db_cursor = self.db.cursor()
             for tablename, _ in self.tablecolumns.items():
                 if not self.table_exist(tablename):
-                    raise Exception('{} does not contain a table named {}'.format(
-                        filename, tablename))
+                    raise Exception('{} does not contain a table\
+                                    named {}'.format(filename, tablename))
         elif self.create:
             # Create database
             self.db = sqlite3.connect(
@@ -196,7 +198,7 @@ It creates three sql table on initialisation.
         return bool(self.db_cursor.fetchone())
 
     def check_data_validity(self, rowid):
-        if not isinstance(rowid,int):
+        if not isinstance(rowid, int):
             raise TypeError('rowid must be an integer')
         if rowid <= 0:
             raise ValueError('rowid must be greater zero')
@@ -226,8 +228,8 @@ It creates three sql table on initialisation.
         return valid
 
     def get_posid(self, posorient):
-        if no isinstance(posorient, pd.Series):
-            ('posorient should be a pandas Series')
+        if not isinstance(posorient, pd.Series):
+            raise TypeError('posorient should be a pandas Series')
         if posorient is not None:
             if not isinstance(posorient, pd.Series):
                 raise TypeError('posorient should be a pandas Series')
@@ -313,11 +315,13 @@ class DataBaseLoad(DataBase):
         """Initialise the DataBaseLoader"""
         if not isinstance(filename, str):
             raise TypeError('filename should be a string')
-        if (not isinstance(channels, list) or not isinstance(channels,np.array)):
+        if (not isinstance(channels, list) or
+           not isinstance(channels, np.array)):
             raise TypeError('nb_channel should be a list or np array')
         for c in channels:
-            if not c in ['R','G','B','D']:
-                raise ValueError('channels must be either R,G,B or D (Distance)')
+            if c not in ['R', 'G', 'B', 'D']:
+                raise ValueError('channels must be either\
+                                  R,G,B or D (Distance)')
         DataBase.__init__(self, filename, channels=channels)
 
     @property
@@ -356,7 +360,7 @@ database
         return posorient
 
     def read_posorient(self, posorient=None, rowid=None):
-        if no isinstance(posorient, pd.Series):
+        if not isinstance(posorient, pd.Series):
             ('posorient should be a pandas Series')
         if posorient is not None:
             if not isinstance(posorient, pd.Series):
@@ -375,15 +379,15 @@ database
                 raise ValueError('missing index alpha_1')
             if 'alpha_2' not in posorient.index:
                 raise ValueError('missing index alpha_2')
-            if not ~np.any(pd.isnull(posorient)):
+            if np.any(pd.isnull(posorient)):
                 raise ValueError('posorient must not contain nan')
-        if not isinstance(rowid,int):
+        if not isinstance(rowid, int):
             raise TypeError('rowid must be an integer')
         if rowid <= 0:
             raise ValueError('rowid must be greater zero')
         if rowid is np.nan:
             raise ValueError('rowid must not be nan')
-        if  (posorient is None) and (rowid is None):
+        if (posorient is None) and (rowid is None):
             Exception('posorient and rowid can not be both None')
         if posorient is not None:
             rowid = self.get_posid(posorient)
@@ -402,7 +406,7 @@ database
         return toreturn
 
     def read_image(self, posorient=None, rowid=None):
-        if no isinstance(posorient, pd.Series):
+        if not isinstance(posorient, pd.Series):
             ('posorient should be a pandas Series')
         if posorient is not None:
             if not isinstance(posorient, pd.Series):
@@ -421,9 +425,9 @@ database
                 raise ValueError('missing index alpha_1')
             if 'alpha_2' not in posorient.index:
                 raise ValueError('missing index alpha_2')
-            if not ~np.any(pd.isnull(posorient)):
+            if np.any(pd.isnull(posorient)):
                 raise ValueError('posorient must not contain nan')
-        if not isinstance(rowid,int):
+        if not isinstance(rowid, int):
             raise TypeError('rowid must be an integer')
         if rowid <= 0:
             raise ValueError('rowid must be greater zero')
@@ -463,7 +467,7 @@ database
                 FROM {}
                 WHERE (rowid={})
                 """.format(tablename, rowid), self.db)
-        if  cmaxminrange.shape[0] != 1:
+        if cmaxminrange.shape[0] != 1:
             raise Exception('Error while reading normalisation factors')
         cmaxminrange = cmaxminrange.iloc[0, :]
         cmaxminrange.name = cmaxminrange.id
@@ -475,19 +479,23 @@ database
         if len(image.shape) != 3:
             raise Exception('image should be 3D array')
         if image.shape[2] != len(self.channels):
-            raise Exception('image does not have the required number of channels {}'.format(
+            raise Exception('image does not have the required\
+                             number of channels {}'.format(
                 len(self.channels)))
         if not isinstance(cmaxminrange, pd.Series):
             raise Exception('cmaxminrange should be a pandas Series')
         if cmaxminrange.empty:
-           raise Exception('cmaxminrange must not be empty')
+            raise Exception('cmaxminrange must not be empty')
         for chan_n in self.channels:
-            if str(chan_n) + '_max'  not in posorient.index:
-                raise ValueError('cminmax range is missing index '+str(chan_n) + '_max')
-            if str(chan_n) + '_min'  not in posorient.index:
-                raise ValueError('cminmax range is missing index '+str(chan_n) + '_min')
-            if str(chan_n) + '_range'  not in posorient.index:
-                raise ValueError('cminmax range is missing index '+str(chan_n) + '_range')
+            if str(chan_n) + '_max' not in cmaxminrange.index:
+                raise ValueError('cminmax range is missing index '
+                                 + str(chan_n) + '_max')
+            if str(chan_n) + '_min' not in cmaxminrange.index:
+                raise ValueError('cminmax range is missing index '
+                                 + str(chan_n) + '_min')
+            if str(chan_n) + '_range' not in cmaxminrange.index:
+                raise ValueError('cminmax range is missing index '
+                                 + str(chan_n) + '_range')
             if any(np.isnan(cmaxminrange.loc[str(chan_n) + '_max'])):
                 raise ValueError('cmaxminrange contains nans')
             if any(np.isnan(cmaxminrange.loc[str(chan_n) + '_min'])):
@@ -575,15 +583,16 @@ class DataBaseSave(DataBase):
         self.db.commit()
 
     def normalise_image(self, image, dtype=np.uint8):
-        if not isinstance(image,np.ndarray):
+        if not isinstance(image, np.ndarray):
             raise TypeError('image must be np.array')
         if any(np.isnan(image)):
             raise ValueError('image must not contain nan values')
-        if image.shape[0]<=0 or image.shape[1]<=0:
+        if image.shape[0] <= 0 or image.shape[1] <= 0:
             raise Exception('image dimensions incorrect')
-        if image.shape[2]!=len(self.channels):
-            raise Exception('image channels number differs from given channel number')
-        if not tools.is_numeric_array(scene):
+        if image.shape[2] != len(self.channels):
+            raise Exception('image channels number differs from\
+                             given channel number')
+        if not tools.is_numeric_array(image):
             raise TypeError('scene is of non numeric type')
         normed_im = np.zeros(image.shape, dtype=dtype)
         maxval_nim = np.iinfo(normed_im.dtype).max
diff --git a/navipy/database/__init__.py~ b/navipy/database/__init__.py~
index 5828dddd76cb670ab3418d7be26f89ef894379b9..2e0ee2bdaefcafd9fa3ed0fd56460020946432d3 100644
--- a/navipy/database/__init__.py~
+++ b/navipy/database/__init__.py~
@@ -84,12 +84,15 @@ import pandas as pd
 import sqlite3
 import io
 import warnings
+import navipy.processing.tools as tools
 
 
 def adapt_array(arr):
     """
     http://stackoverflow.com/a/31312102/190597 (SoulNibbler)
     """
+    if array is None:
+        raise ValueError('array must not be None')
     out = io.BytesIO()
     np.save(out, arr)
     out.seek(0)
@@ -97,6 +100,8 @@ def adapt_array(arr):
 
 
 def convert_array(text):
+    if text is None:
+        raise ValueError('text must not be None')
     out = io.BytesIO(text)
     out.seek(0)
     return np.load(out)
@@ -118,8 +123,13 @@ It creates three sql table on initialisation.
         """Initialisation of the database """
         if not isinstance(filename, str):
             raise TypeError('filename should be a string')
-        if not isinstance(channels, list):
-            raise TypeError('nb_channel should be an integer')
+        if (not isinstance(channels, list) or
+           not isinstance(channels, np.array)):
+            raise TypeError('nb_channel should be a list or np array')
+        """for c in channels:
+            if not c in ['R','G','B','D']:
+                raise ValueError('channels
+                                 must be either R,G,B or D (Distance)')"""
         self.filename = filename
         self.channels = channels
         self.normalisation_columns = list()
@@ -150,9 +160,9 @@ It creates three sql table on initialisation.
                 timeout=10)
             self.db_cursor = self.db.cursor()
             for tablename, _ in self.tablecolumns.items():
-                assert self.table_exist(tablename),\
-                    '{} does not contain a table named {}'.format(
-                        filename, tablename)
+                if not self.table_exist(tablename):
+                    raise Exception('{} does not contain a table\
+                                    named {}'.format(filename, tablename))
         elif self.create:
             # Create database
             self.db = sqlite3.connect(
@@ -177,7 +187,8 @@ It creates three sql table on initialisation.
         self.viewing_directions[..., 1] = ma
 
     def table_exist(self, tablename):
-        assert isinstance(tablename, str), 'tablename should be a string'
+        if not isinstance(tablename, str):
+            raise TypeError('tablename should be a string')
         self.db_cursor.execute(
             """
             SELECT count(*)
@@ -187,6 +198,12 @@ It creates three sql table on initialisation.
         return bool(self.db_cursor.fetchone())
 
     def check_data_validity(self, rowid):
+        if not isinstance(rowid, int):
+            raise TypeError('rowid must be an integer')
+        if rowid <= 0:
+            raise ValueError('rowid must be greater zero')
+        if rowid is np.nan:
+            raise ValueError('rowid must not be nan')
         self.db_cursor.execute(
             """
             SELECT count(*)
@@ -211,8 +228,27 @@ It creates three sql table on initialisation.
         return valid
 
     def get_posid(self, posorient):
-        assert isinstance(posorient, pd.Series),\
-            'posorient should be a pandas Series'
+        if not isinstance(posorient, pd.Series):
+            raise TypeError('posorient should be a pandas Series')
+        if posorient is not None:
+            if not isinstance(posorient, pd.Series):
+                raise TypeError('posorient should be a pandas Series')
+            if posorient.empty:
+                raise Exception('position must not be empty')
+            if 'x' not in posorient.index:
+                raise ValueError('missing index x')
+            if 'y' not in posorient.index:
+                raise ValueError('missing index y')
+            if 'z' not in posorient.index:
+                raise ValueError('missing index z')
+            if 'alpha_0' not in posorient.index:
+                raise ValueError('missing index alpha_0')
+            if 'alpha_1' not in posorient.index:
+                raise ValueError('missing index alpha_1')
+            if 'alpha_2' not in posorient.index:
+                raise ValueError('missing index alpha_2')
+            if not ~np.any(pd.isnull(posorient)):
+                raise ValueError('posorient must not contain nan')
         where = """x>=? and x<=?"""
         where += """and y>=? and y<=?"""
         where += """and z>=? and z<=?"""
@@ -277,6 +313,15 @@ class DataBaseLoad(DataBase):
 
     def __init__(self, filename, channels=['R', 'G', 'B', 'D']):
         """Initialise the DataBaseLoader"""
+        if not isinstance(filename, str):
+            raise TypeError('filename should be a string')
+        if (not isinstance(channels, list) or
+           not isinstance(channels, np.array)):
+            raise TypeError('nb_channel should be a list or np array')
+        for c in channels:
+            if c not in ['R', 'G', 'B', 'D']:
+                raise ValueError('channels must be either\
+                                  R,G,B or D (Distance)')
         DataBase.__init__(self, filename, channels=channels)
 
     @property
@@ -315,8 +360,35 @@ database
         return posorient
 
     def read_posorient(self, posorient=None, rowid=None):
-        assert (posorient is None) or (rowid is None),\
-            'posorient and rowid can not be both None'
+        if not isinstance(posorient, pd.Series):
+            ('posorient should be a pandas Series')
+        if posorient is not None:
+            if not isinstance(posorient, pd.Series):
+                raise TypeError('posorient should be a pandas Series')
+            if posorient.empty:
+                raise Exception('position must not be empty')
+            if 'x' not in posorient.index:
+                raise ValueError('missing index x')
+            if 'y' not in posorient.index:
+                raise ValueError('missing index y')
+            if 'z' not in posorient.index:
+                raise ValueError('missing index z')
+            if 'alpha_0' not in posorient.index:
+                raise ValueError('missing index alpha_0')
+            if 'alpha_1' not in posorient.index:
+                raise ValueError('missing index alpha_1')
+            if 'alpha_2' not in posorient.index:
+                raise ValueError('missing index alpha_2')
+            if np.any(pd.isnull(posorient)):
+                raise ValueError('posorient must not contain nan')
+        if not isinstance(rowid, int):
+            raise TypeError('rowid must be an integer')
+        if rowid <= 0:
+            raise ValueError('rowid must be greater zero')
+        if rowid is np.nan:
+            raise ValueError('rowid must not be nan')
+        if (posorient is None) and (rowid is None):
+            Exception('posorient and rowid can not be both None')
         if posorient is not None:
             rowid = self.get_posid(posorient)
         # Read images
@@ -334,6 +406,37 @@ database
         return toreturn
 
     def read_image(self, posorient=None, rowid=None):
+        if not isinstance(posorient, pd.Series):
+            ('posorient should be a pandas Series')
+        if posorient is not None:
+            if not isinstance(posorient, pd.Series):
+                raise TypeError('posorient should be a pandas Series')
+            if posorient.empty:
+                raise Exception('position must not be empty')
+            if 'x' not in posorient.index:
+                raise ValueError('missing index x')
+            if 'y' not in posorient.index:
+                raise ValueError('missing index y')
+            if 'z' not in posorient.index:
+                raise ValueError('missing index z')
+            if 'alpha_0' not in posorient.index:
+                raise ValueError('missing index alpha_0')
+            if 'alpha_1' not in posorient.index:
+                raise ValueError('missing index alpha_1')
+            if 'alpha_2' not in posorient.index:
+                raise ValueError('missing index alpha_2')
+            if np.any(pd.isnull(posorient)):
+                raise ValueError('posorient must not contain nan')
+        if not isinstance(rowid, int):
+            raise TypeError('rowid must be an integer')
+        if rowid <= 0:
+            raise ValueError('rowid must be greater zero')
+        if rowid is np.nan:
+            raise ValueError('rowid must not be nan')
+        if (posorient is None) and (rowid is None):
+            raise Exception('posorient and rowid can not be both None')
+        if posorient is not None:
+            rowid = self.get_posid(posorient)
         """Read an image at a given position-orientation or given id of row in the \
         database.
 
@@ -343,8 +446,8 @@ database
         :returns: an image
         :rtype: numpy.ndarray
         """
-        assert (posorient is None) or (rowid is None),\
-            'posorient and rowid can not be both None'
+        if (posorient is None) and (rowid is None):
+            Exception('posorient and rowid can not be both None')
         if posorient is not None:
             rowid = self.get_posid(posorient)
         # Read images
@@ -364,8 +467,8 @@ database
                 FROM {}
                 WHERE (rowid={})
                 """.format(tablename, rowid), self.db)
-        assert cmaxminrange.shape[0] == 1,\
-            'Error while reading normalisation factors'
+        if cmaxminrange.shape[0] != 1:
+            raise Exception('Error while reading normalisation factors')
         cmaxminrange = cmaxminrange.iloc[0, :]
         cmaxminrange.name = cmaxminrange.id
         cmaxminrange.drop('id')
@@ -373,13 +476,32 @@ database
         return self.denormalise_image(image, cmaxminrange)
 
     def denormalise_image(self, image, cmaxminrange):
-        assert len(image.shape) == 3,\
-            'image should be 3D array'
-        assert image.shape[2] == len(self.channels),\
-            'image does not have the required number of channels {}'.format(
-                len(self.channels))
-        assert isinstance(cmaxminrange, pd.Series),\
-            'cmaxminrange should be a pandas Series'
+        if len(image.shape) != 3:
+            raise Exception('image should be 3D array')
+        if image.shape[2] != len(self.channels):
+            raise Exception('image does not have the required\
+                             number of channels {}'.format(
+                len(self.channels)))
+        if not isinstance(cmaxminrange, pd.Series):
+            raise Exception('cmaxminrange should be a pandas Series')
+        if cmaxminrange.empty:
+            raise Exception('cmaxminrange must not be empty')
+        for chan_n in self.channels:
+            if str(chan_n) + '_max' not in cmaxminrange.index:
+                raise ValueError('cminmax range is missing index '
+                                 + str(chan_n) + '_max')
+            if str(chan_n) + '_min' not in cmaxminrange.index:
+                raise ValueError('cminmax range is missing index '
+                                 + str(chan_n) + '_min')
+            if str(chan_n) + '_range' not in cmaxminrange.index:
+                raise ValueError('cminmax range is missing index '
+                                 + str(chan_n) + '_range')
+            if any(np.isnan(cmaxminrange.loc[str(chan_n) + '_max'])):
+                raise ValueError('cmaxminrange contains nans')
+            if any(np.isnan(cmaxminrange.loc[str(chan_n) + '_min'])):
+                raise ValueError('cmaxminrange contains nans')
+            if any(np.isnan(cmaxminrange.loc[str(chan_n) + '_range'])):
+                raise ValueError('cmaxminrange contains nans')
         denormed_im = np.zeros(image.shape, dtype=np.float)
         maxval_nim = np.iinfo(image.dtype).max
         #
@@ -408,7 +530,6 @@ class DataBaseSave(DataBase):
         DataBase.__init__(self, filename, channels=channels)
         self.arr_dtype = arr_dtype
 
-    
     def create(self):
         """use to decide weather to alter the database or not
         return True because we will need
@@ -433,10 +554,10 @@ class DataBaseSave(DataBase):
         self.insert_replace(tablename, params)
 
     def insert_replace(self, tablename, params):
-        assert isinstance(tablename, str),\
-            'table are named by string'
-        assert isinstance(params, dict),\
-            'params should be dictionary columns:val'
+        if not isinstance(tablename, str):
+            raise ValueError('table are named by string')
+        if not isinstance(params, dict):
+            raise ValueError('params should be dictionary columns:val')
         params_list = list()
         columns_str = ''
         for key, val in params.items():
@@ -462,6 +583,17 @@ class DataBaseSave(DataBase):
         self.db.commit()
 
     def normalise_image(self, image, dtype=np.uint8):
+        if not isinstance(image, np.ndarray):
+            raise TypeError('image must be np.array')
+        if any(np.isnan(image)):
+            raise ValueError('image must not contain nan values')
+        if image.shape[0] <= 0 or image.shape[1] <= 0:
+            raise Exception('image dimensions incorrect')
+        if image.shape[2] != len(self.channels):
+            raise Exception('image channels number differs from\
+                             given channel number')
+        if not tools.is_numeric_array(image):
+            raise TypeError('scene is of non numeric type')
         normed_im = np.zeros(image.shape, dtype=dtype)
         maxval_nim = np.iinfo(normed_im.dtype).max
         #