def __init__(self, filename, append_chromosome=False, store_positions=True, sample=None):
super(VCFReader, self).__init__(filename)<EOL>self.positions = {}<EOL>self.append_chromosome = append_chromosome<EOL>self.vcf_iterator = VCFIterator(filename, sample=sample)<EOL>self.vcf_file = self.vcf_iterator.vcf_file<EOL>self.vcf_entries = []<EOL>for vcf_entry in self.vcf_iterator:<EOL><INDENT>chrom, start = vcf_entry.chrom, vcf_entry.pos<EOL>if append_chromosome:<EOL><INDENT>chrom = '<STR_LIT>' % chrom<EOL><DEDENT>if store_positions:<EOL><INDENT>start = int(start)<EOL>furthest_end = max([abs(i) if i is not None else None for i in vcf_entry.get_alt_lengths()])<EOL>if furthest_end is not None:<EOL><INDENT>end = start+abs(furthest_end)<EOL>try:<EOL><INDENT>self.positions[chrom][(start, end)].append(vcf_entry)<EOL><DEDENT>except KeyError:<EOL><INDENT>try:<EOL><INDENT>self.positions[chrom][(start, end)] = [vcf_entry]<EOL><DEDENT>except KeyError:<EOL><INDENT>self.positions[chrom] = {(start, end): [vcf_entry]}<EOL><DEDENT><DEDENT><DEDENT><DEDENT>self.vcf_entries.append(vcf_entry)<EOL><DEDENT>
This will read an entire VCF file and allow for querying based on attributes such
         location, individuals.

        :param filename: GFF file to read