def _read_n(self, l, ret):
        """
        Reads 'N' mask from 1 bit file to convert bases to 'N'. In the
        2 bit file, 'N' or any other invalid base is written as 'A'.
        Therefore the 'N' mask file is required to correctly identify where
        invalid bases are.
        
        Parameters
        ----------
        l : tuple
            location
        ret : list
            List of bases which will be modified in place.
        """
        
        file = os.path.join(self.dir, l.chr + ".n.1bit")
        
        if not os.path.exists(file):
            return
        
        if file != self.__n_file:
            print('Caching {}...'.format(file))
            f = open(file, 'rb')
            self.__n_data = f.read()
            f.close()
            self.__n_file = file
        
        d = DNA2Bit._read1bit(self.__n_data, l, offset=True)
        
        for i in range(0, len(ret)):
            if d[i] == 1:
                ret[i] = DNA_N_UC
Reads 'N' mask from 1 bit file to convert bases to 'N'. In the
        2 bit file, 'N' or any other invalid base is written as 'A'.
        Therefore the 'N' mask file is required to correctly identify where
        invalid bases are.
        
        Parameters
        ----------
        l : tuple
            location
        ret : list
            List of bases which will be modified in place.