def contains(self, seqid, start, end, overlap=True):
        """This returns a list of GFF objects which cover a specified location.

        :param seqid: The landmark identifier (usually a chromosome)
        :param start: The 1-based position of the start of the range we are querying
        :param end: The 1-based position of the end of the range we are querying
        :param overlap: A boolean value, if true we allow features to overlap the query range.
        For instance, overlap=True with the range (5,10), will return a GFF object
        spanning from (8,15). overlap=False will only return objects fully containing the range.
        :return: A list of GFF objects
        """
        d = self.positions.get(seqid,[])
        if overlap:
            return [gff_object for gff_start, gff_end in d
                    for gff_object in d[(gff_start, gff_end)]
                    if not (end <= gff_start or start >= gff_end)]
        else:
            return [gff_object for gff_start, gff_end in d
                    for gff_object in d[(gff_start, gff_end)]
                    if (gff_start <= start and gff_end >= end)]
This returns a list of GFF objects which cover a specified location.

        :param seqid: The landmark identifier (usually a chromosome)
        :param start: The 1-based position of the start of the range we are querying
        :param end: The 1-based position of the end of the range we are querying
        :param overlap: A boolean value, if true we allow features to overlap the query range.
        For instance, overlap=True with the range (5,10), will return a GFF object
        spanning from (8,15). overlap=False will only return objects fully containing the range.
        :return: A list of GFF objects