def get_sequence(self, chrom, start, end, strand='+', indexing=(-1, 0)):
        """
        chromosome is entered relative to the file it was built with, so it can be 'chr11' or '11',
        start/end are coordinates, which default to python style [0,1) internally. So positions should be
        entered with (1,1) indexing. This can be changed with the indexing keyword.
        The default is for everything to be relative to the positive strand
        """
        try:
            divisor = int(self.sequence_index[chrom][2])
        except KeyError:
            self.open_fasta_index()
            try:
                divisor = int(self.sequence_index[chrom][2])
            except KeyError:
                sys.stderr.write("%s cannot be found within the fasta index file.\n" % chrom)
                return ""
        start+=indexing[0]
        end+=indexing[1]
        #is it a valid position?
        if ( start < 0 or end > int(self.sequence_index[chrom][0] )):
            raise ValueError("The range %d-%d is invalid. Valid range for this feature is 1-%d." % (start-indexing[0], end-indexing[1], 
                                                                                                     int(self.sequence_index[chrom][0])))
        #go to start of chromosome
        seekpos = int(self.sequence_index[chrom][1])
        #find how many newlines we have
        seekpos += start+start/divisor
        slen = end-start
        endpos = int(slen + (slen/divisor) + 1) #a hack of sorts but it works and is easy
        self.fasta_file.seek(seekpos, 0)
        output = self.fasta_file.read(endpos)
        output = output.replace('\n', '')
        out = output[:slen]
        if strand == '+' or strand == 1:
            return out
        if strand == '-' or strand == -1:
            return _reverse_complement(out)