code: def profiler(self):
          
          # Initialise variables
          profiledata = defaultdict(make_dict)
          profileset = set()
          genedict = {}
          # Find all the unique profiles to use with a set
          for sample in self.metadata.samples:
              if sample[self.analysistype].profile != 'NA':
                  profileset.add(sample[self.analysistype].profile[0])
          # Extract the profiles for each set
          for sequenceprofile in profileset:
              # Clear the list of genes
              genelist = []
              for sample in self.metadata.samples:
                  if sequenceprofile == sample[self.analysistype].profile[0]:
                      genelist = [os.path.split(x)[1].split('.')[0] for x in sample[self.analysistype].alleles]
              try:
                  # Open the sequence profile file as a dictionary
                  profile = DictReader(open(sequenceprofile))
              # Revert to standard comma separated values
              except KeyError:
                  # Open the sequence profile file as a dictionary
                  profile = DictReader(open(sequenceprofile))
              # Iterate through the rows
              for row in profile:
                  # Iterate through the genes
                  for gene in genelist:
                      # Add the sequence profile, and type, the gene name and the allele number to the dictionary
                      try:
                          profiledata[sequenceprofile][row['ST']][gene] = row[gene]
                      except KeyError:
                          pass
              # Add the gene list to a dictionary
              genedict[sequenceprofile] = sorted(genelist)
              # Add the profile data, and gene list to each sample
              for sample in self.metadata.samples:
                  if sample.general.bestassemblyfile != 'NA':
                      if sequenceprofile == sample[self.analysistype].profile[0]:
                          # Populate the metadata with the profile data
                          sample[self.analysistype].profiledata = profiledata[sample[self.analysistype].profile[0]]
                          # Add the allele directory to a list of directories used in this analysis
                          self.allelefolders.add(sample[self.analysistype].alleledir)
                          dotter()
docs: Creates a dictionary from the profile scheme(s)