Returns the DNA for a location.
        
        Parameters
        ----------
        mask : str, optional
            Indicate whether masked bases should be represented as is
            ('upper'), lowercase ('lower'), or as N ('n')
        lowercase : bool, optional
            Indicates whether sequence should be displayed as upper or
            lowercase. Default is False so sequence is uppercase. Note that
            this only affects the reference DNA and does not affect the
            mask.
        
        Returns
        -------
        list
            List of base chars.

def dna(self, loc, mask='lower', rev_comp=False, lowercase=False):
        """
        Returns the DNA for a location.
        
        Parameters
        ----------
        mask : str, optional
            Indicate whether masked bases should be represented as is
            ('upper'), lowercase ('lower'), or as N ('n')
        lowercase : bool, optional
            Indicates whether sequence should be displayed as upper or
            lowercase. Default is False so sequence is uppercase. Note that
            this only affects the reference DNA and does not affect the
            mask.
        
        Returns
        -------
        list
            List of base chars.
        """
        
        l = libdna.parse_loc(loc)
            
        ret = self._read_dna(l, lowercase=lowercase)
        
        self._read_n(l, ret)
            
        self._read_mask(l, ret, mask=mask)
        
        if rev_comp:
            DNA2Bit._rev_comp(ret)
        
        ret = ret.decode('utf-8')
        
        if lowercase:
            ret = ret.lower()
      
        return ret