code: def parse_selfsm(self, f):
  		
  		#create a dictionary to populate from this sample's file
  		parsed_data = dict()
  		# set a empty variable which denotes if the headers have been read
  		headers = None
  		# for each line in the file
  		for l in f['f'].splitlines():
  			# split the line on tab
  			s = l.split("\t")
  			# if we haven't already read the header line
  			if headers is None:
  				# assign this list to headers variable
  				headers = s
  			# for all rows after the first
  			else:
  				# clean the sample name (first column) and assign to s_name
  				s_name = self.clean_s_name(s[0], f['root'])
  				# create a dictionary entry with the first column as a key (sample name) and empty dictionary as a value
  				parsed_data[s_name] = {}
  				# for each item in list of items in the row
  				for i, v in enumerate(s):
  					# if it's not the first element (if it's not the name)
  					if i != 0:
  						# see if CHIP is in the column header and the value is not NA
  						if "CHIP" in [headers[i]] and v != "NA":
  							# set hide_chip_columns = False so they are not hidden
  							self.hide_chip_columns=False
  						# try and convert the value into a float
  						try:
  							# and add to the dictionary the key as the corrsponding item from the header and the value from the list
  							parsed_data[s_name][headers[i]] = float(v)
  						#if can't convert to float...
  						except ValueError:
  							# add to the dictionary the key as the corrsponding item from the header and the value from the list
  							parsed_data[s_name][headers[i]] = v
  
  		# else return the dictionary
  		return parsed_data
docs: Go through selfSM file and create a dictionary with the sample name as a key,