def configfilepopulator(self):
        """Populates an unpopulated config.xml file with run-specific values and creates
        the file in the appropriate location"""
        # Set the number of cycles for each read and index using the number of reads specified in the sample sheet
        self.forwardlength = self.metadata.header.forwardlength
        self.reverselength = self.metadata.header.reverselength
        # Create a list of lists containing [cycle start, cycle end, and :runid] for each of forward reads, index 1
        # index 2, and reverse reads
        cycles = [[1, self.forwardlength, self.runid],
                  [self.forwardlength + 1, self.forwardlength + 8, self.runid],
                  [self.forwardlength + 9, self.forwardlength + 16, self.runid],
                  [self.forwardlength + 17, self.forwardlength + 16 + self.reverselength, self.runid]]
        # A dictionary of parameters (keys) and the values to use when repopulating the config file
        parameters = {'RunFolder': self.runid, 'RunFolderDate': self.metadata.date.replace("-", ""),
                      'RunFolderId': self.metadata.runnumber, 'RunFlowcellId': self.metadata.flowcell}
        # Load the xml file using element tree
        config = ElementTree.parse("{}/config.xml".format(self.homepath))
        # Get the root of the tree
        configroot = config.getroot()
        # The run node is the only child node of the root
        for run in configroot:
            # Iterate through the child nodes. There are three nodes sections that must be populated
            for child in run:
                # Find the cycles tag
                if child.tag == 'Cycles':
                    # Set the attributes with a dictionary containing the total reads
                    child.attrib = {'Last': '{}'.format(self.forwardlength + 16 + self.reverselength),
                                    'Number': '{}'.format(self.totalreads), 'First': '1'}
                elif child.tag == 'RunParameters':
                    # Name the child as runparameter for easier coding
                    runparameters = child
                    for runparameter in runparameters:
                        # This replaces data in both 'ImagingReads' and 'Reads' nodes
                        if 'Reads' in runparameter.tag:
                            # Enumerate through the run parameters
                            for indexcount, reads in enumerate(runparameter):
                                # The values for the index are 1, 2, 3, 4. Subtract one to get the index of the first
                                # list in cycles
                                index = int(runparameter.attrib['Index']) - 1
                                # Set the text value as the appropriate value from cycles
                                reads.text = str(cycles[index][indexcount])
                        # Populate the instrument value
                        if runparameter.tag == 'Instrument':
                            runparameter.text = self.instrument
                        # Iterate through the parameters in the parameter dictionary
                        for parameter in parameters:
                            # If the key is encountered
                            if runparameter.tag == parameter:
                                # Replace the text with the value
                                runparameter.text = parameters[parameter]
                        if 'Barcode' in runparameter.tag:
                            for cycle, barcode in enumerate(runparameter):
                                # Add the barcode cycles. These are the number of forward reads (+ 1 as the barcode
                                # starts 1 cycle after the first run) plus the current iterator
                                barcode.text = str(self.forwardlength + 1 + cycle)
        # Write the modified config file to the desired location
        config.write('{}Data/Intensities/BaseCalls/config.xml'.format(self.miseqfolder))
def configfilepopulator ( self ) : self . forwardlength = self . metadata . header . forwardlength self . reverselength = self . metadata . header . reverselength cycles = [ [ 1 , self . forwardlength , self . runid ] , [ self . forwardlength + 1 , self . forwardlength + 8 , self . runid ] , [ self . forwardlength + 9 , self . forwardlength + 16 , self . runid ] , [ self . forwardlength + 17 , self . forwardlength + 16 + self . reverselength , self . runid ] ] parameters = { 'RunFolder' : self . runid , 'RunFolderDate' : self . metadata . date . replace ( "-" , "" ) , 'RunFolderId' : self . metadata . runnumber , 'RunFlowcellId' : self . metadata . flowcell } config = ElementTree . parse ( "{}/config.xml" . format ( self . homepath ) ) configroot = config . getroot ( ) for run in configroot : for child in run : if child . tag == 'Cycles' : child . attrib = { 'Last' : '{}' . format ( self . forwardlength + 16 + self . reverselength ) , 'Number' : '{}' . format ( self . totalreads ) , 'First' : '1' } elif child . tag == 'RunParameters' : runparameters = child for runparameter in runparameters : if 'Reads' in runparameter . tag : for indexcount , reads in enumerate ( runparameter ) : index = int ( runparameter . attrib [ 'Index' ] ) - 1 reads . text = str ( cycles [ index ] [ indexcount ] ) if runparameter . tag == 'Instrument' : runparameter . text = self . instrument for parameter in parameters : if runparameter . tag == parameter : runparameter . text = parameters [ parameter ] if 'Barcode' in runparameter . tag : for cycle , barcode in enumerate ( runparameter ) : barcode . text = str ( self . forwardlength + 1 + cycle ) config . write ( '{}Data/Intensities/BaseCalls/config.xml' . format ( self . miseqfolder ) )
Populates an unpopulated config.xml file with run-specific values and creates
        the file in the appropriate location